Linq - Casting IQueryable à IList retourne null - POURQUOI?

Je manque quelque chose d'évident ici. Je ne comprends pas pourquoi cette distribution des résultats d'une requête linq retourne null et non pas la liste tapée je suis requérant.

IList<IMyDataInterface> list = query.ToList() as IList<IMyDataInterface>;

Le code complet pour l'exécuter ce qui est ci-dessous. C'est une lacune des connaissances, j'ai besoin de pont. J'ai essayé toutes sortes de permutations de jette pour le faire fonctionner. Je n'ai pas d'Exceptions, juste une valeur null. Il convient de noter que la requête Linq est la sélection de ses résultats dans les instances de mon custom "MyDataClass", qui met en œuvre IMyDataInterface

class Program
{
    static void Main(string[] args)
    {
        IMyFunctionalInterface myObject = new MyClass();


        //myObject.Get() returns null for some reason...
        IList<IMyDataInterface> list = myObject.Get();

        Debug.Assert(list != null, "Cast List is null");
    }
}

public interface IMyFunctionalInterface
{
    IList<IMyDataInterface> Get();
}

public class MyClass : IMyFunctionalInterface
{
    public IList<IMyDataInterface> Get()
    {
        string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };

        var query = from n in names
                    where n.Contains("a")
                    select new MyDataClass
                    {
                        Name = n.ToString()
                    };

        //There IS data in the query result
        Debug.Assert(query != null, "result is null");
        //but the cast here makes it return null
        IList<IMyDataInterface> list = query.ToList() as IList<IMyDataInterface>;

        return list;
    }

}
public interface IMyDataInterface
{
    string Name { get; set; }
}

public class MyDataClass : IMyDataInterface
{
    public string Name { get; set; }
}
Ce qui se passe quand vous venez de supprimer la sécurité cast ("comme IList<IMyDataInterface>")? Je pense que vous pourriez juste l'exécuter .ToList() et de le coller dans votre IList<IMyDataInterface> variable.
Je pensais que trop, mais il ne fonctionne pas.

OriginalL'auteur jlembke | 2009-01-30