匿名型からプロパティの値を取得するにはどうすればいいですか? 質問する

匿名型からプロパティの値を取得するにはどうすればいいですか? 質問する

Linq クエリによってデータが入力されたデータグリッドがあります。データグリッド内のフォーカスされた行が変更されると、そのオブジェクトのプロパティの 1 つに等しい変数を設定する必要があります。

私は試した...

var selectedObject = view.GetRow(rowHandle);
_selectedId = selectedObject.Id;

...しかし、コンパイラはこれをまったく考慮しません (「埋め込みステートメントは宣言またはラベル付きステートメントにすることはできません」)。

プロパティへのアクセスは簡単であると思われます。実行時にオブジェクトを検査すると、期待するすべてのプロパティが表示されますが、それらにアクセスする方法がわかりません。

匿名オブジェクトのプロパティにアクセスするにはどうすればよいですか?

説明のための編集:

私はたまたま DevExpress XtraGrid コントロールを使用しています。このコントロールを、複数の異なるオブジェクトで構成された Linq クエリでロードしたため、データは実際に既存のどのクラスにも準拠しなくなりました (つまり、これを何にもキャストできません)。

.NET 3.5 を使用しています。

view.GetRow(rowHandle) メソッドの結果を表示すると、次のような匿名型が取得されます。

{ ClientId = 7, ClientName = "ACME Inc.", Jobs = 5 }

私の目的は、この匿名型から ClientId を取得して、他の操作 (クライアント レコードを含むフォームの読み込みなど) を実行できるようにすることです。

初期の回答で提案されたいくつかのことを試してみましたが、この ClientId を取得できるところまで到達できませんでした。

ベストアンサー1

リフレクションを使用したことはありますか? 以下にサンプル コード スニペットを示します。

// use reflection to retrieve the values of the following anonymous type
var obj = new { ClientId = 7, ClientName = "ACME Inc.", Jobs = 5 }; 
System.Type type = obj.GetType(); 
int clientid = (int)type.GetProperty("ClientId").GetValue(obj, null);
string clientname = (string)type.GetProperty("ClientName").GetValue(obj, null);

// use the retrieved values for whatever you want...

おすすめ記事