0
このタイプの変換を許可しない理由を知りたいと思います。このpost in SOの件名にはすでに近づいていましたが、なぜこれがネイティブにできないのかについての低レベルの説明が必要です。なぜC#はオブジェクトへの匿名キャストを許可していませんか?
なぜこれらのキャストが失敗するのですか?
OBS:私はそれを反映させることが可能であることを知っています。
IList<People> peopleList = new List<People>()
{
new People() { Name = "Again", Age = 10 },
new People() { Name = "Over", Age = 20 },
new People() { Name = "Jonh", Age = 30 },
new People() { Name = "Enzo", Age = 40 },
};
var anonymous = (from p in peopleList
select new
{
Name = p.Name,
Age = p.Age
});
// Does not work
IList<People> listt = (IList<People>)anonymous;
//Does not Work
IList<People> listt = (anonymous as List<People>);
私はそれが*うまくいくべきだと思うのは興味深いと思います。匿名型は、同じフィールドを持っていても、別の型ではありません。同じことは、匿名であるかどうかにかかわらず、他のどのタイプにも適用されます。それは言語がどのように構築されたか、C#ではダックタイピングがありません。 – nvoigt
なぜ機能するのですか?それは匿名型であり、 'People'インスタンスではありません。あるものから別のものへの考えられるキャストはありません。キャストとは、「このオブジェクトを他の同等のタイプと同じように扱う」という意味です。この匿名型が 'People'に相当するということは何もありません。あなたがペットを表現するためにそれを使ったらどうですか? –
'Person'を' Dog'にキャストできますか?どちらも名前と脚があるので、なぜキャストは機能しないのですか? –