6

オブジェクトのリストを返すためにエンティティにLINQを使用しています

            var st = personsList.Select(p => new
            {
                ID = p.Id,
                Key = p.Key,
                Name = p.Name,
                Address = p.Address,
                City = p.City,
                PhoneNumber = p.PhoneNumber
            })
            return st.ToList();

別のクラスのリストを取得した後、各プロパティにアクセスするにはどうすればよいですか?

何かのようなもの

foreach(object s in St)
{
    string name = s.Name;
}

オブジェクトをキャストするための事前定義されたクラスがありません。

これは、クラスを作成してオブジェクトをそのクラスタイプにキャストすることなく実行できますか?

ありがとう

4

4 に答える 4

10

C#4を使用していますか?あなたは使用してみることができますdynamic

foreach(dynamic s in St)
{
    string name = s.Name;
}

もちろん、オブジェクトにないプロパティにアクセスしようとすると、実行時にしか検出されないというリスクがあります。

余談ですが、この場合、これらすべてのプロパティを持つクラスを実際に作成する方が理にかなっていますか?明らかにいくつかの場所でそれらが必要であり、型安全性とコンパイル時エラーの利点を得るでしょう。

于 2012-04-17T09:12:50.583 に答える
5

あなたは次のものを使うことができます

foreach(object s in St)
{
   Type type = s.GetType();
   PropertyInfo property = type.GetProperty("Name");
   if(property !=null)
   {
       string name= (string )property.GetValue(s, null);
   }
}

名前空間System.Reflectionをクラスに追加する必要があります

于 2012-04-17T09:19:14.623 に答える
0

コンパイラーは、メソッドのスコープ内で使用できる匿名タイプを作成します。LINQクエリの結果を渡す必要がある場合は、PersonSummaryなどの情報を表すドメインオブジェクトを作成し、クエリの結果をそれに割り当てるのが最善です。C#は強く型付けされており、それを利用しています。

于 2012-04-17T09:17:22.433 に答える
0

C#3.0には、var暗黙的なキャストを可能にするタイプがあります。

于 2012-04-17T09:16:37.553 に答える