我使用反射将一些成员名称作为字符串。我使用的方法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> { }
解决这个问题的好方法是什么?
答案 0 :(得分:1)
最好的方法是忘记using
指令并直接使用该类:
string propName = MembersOf<MyGeneric<T>>.GetName(x => x.SomeProp);
答案 1 :(得分:0)
D'哦! using ClassMembers
别名隐藏了显而易见的内容。我只需要在班上直接使用MembersOf<MyGeneric<T>>
!
class MyGeneric<T>
{
public int MyProperty { get; set; }
static MyClass<T>
{
string lMyPropertyName = MembersOf<MyGeneric<T>>.GetName(x => x.MyProperty);
}
}