4

簡単な例ですがCat、プロパティを持つオブジェクトがありNameます。

というメソッドを持つクラスがありますPrintName<T>(T objectToPrint)

Console.WriteLine(objectToPrint.Name)タイプだから仕方ないT

名前を取得する linq 式としてパラメーターを渡すことはできますか? 何かのようなもの;

Cat c = new Cat("Bernard the Cat");

PrintName(cat, parameter: c => c.Name);

次に、PrintName でできること

Console.WriteLine(cat.RunLinq(parameter));

4

3 に答える 3

7

インターフェイスを使用することもできますが、プロパティが変更できる場合は変更できます。

最初の解決策:プロパティの名前が必要な場合

PrintName<T>(T objectToPrint, Expression<Func<T, object>> property)

利用方法

PrintName(cat, c=> c.Name)

次に、プロパティの「名前」を取得します。

var name = (property.Body as MemberExpression).Member.Name

2番目の解決策: プロパティの値が必要な場合

プロパティの値が必要な場合は、Func<T, object> funcパラメーターを使用します

// object if you don't know the type of the property, 
// you can limit it to string if needed, of course
PrintName<T>(T objectToPrint, Func<T, object> func)

利用方法

PrintName(cat, c => c.Name)

それから

var value = func(cat)
于 2013-07-26T09:25:41.987 に答える