リフレクションを使用して一部のメンバ名を文字列として取得しています。私はon Google Codeを見つけた方法を使用しています(私はそれが使用する反射/ LINQの魔法の強力な把握を持っていない):ジェネリックのメンバ名を型パラメータを知らずに文字列として取得します。
public static class MembersOf<T> {
public static string GetName<R>(Expression<Func<T,R>> expr) {
var node = expr.Body as MemberExpression;
if (object.ReferenceEquals(null, node))
throw new InvalidOperationException("Expression must be of member access");
return node.Member.Name;
}
}
これは、静的コンストラクタで素晴らしい作品。私はちょうどこのようにそれを使用します。
using ClassMembers = MembersOf<MyClass>;
class MyClass
{
public int MyProperty { get; set; }
static MyClass
{
string lMyPropertyName = ClassMembers.GetName(x => x.MyProperty);
}
}
あなたは文字列リテラルでスペルミスのメンバー名を避けるため、自動リファクタリングツールを使用することができますこの方法で。 INotifyPropertyChanged
を実装するといいですね!あなたはジェネリック型パラメータとして、非結合型を使用することはできません
しかし、今、私は同じように使用する一般的なクラスを持っている、とI've learnedは:
using ClassMembers = MembersOf<MyGeneric<>>;
class MyGeneric<T> { }
は何に良い方法だろうこの問題を回避するには?
string propName = MembersOf<MyGeneric<T>>.GetName(x => x.SomeProp);