积极答复者
如何动态得到特定的field名称

问题
-
我有一段代码需要反射得到MyClass.Field1 的FieldInfo。 于是我使用了 FieldInfo1 = typeof(MyClass).GetField("Field1"); 且运行正常。
但是随后我发现这段代码是有维护风险的。因为如果我今后修改了 Field1这个字段的名称,那么我必须要记得修改后面代码中字符串("Field1")中的内容。这在大多数情况下都是不可能做到的。因为不能保证今后开发的人还是我。而且就算今后还是我维护这段代码,我也不可能总记着这种事情。
因此我想知道是否有办法在运行时动态得到"Field1"。这样的话,无论谁或何时修改了 MyClass.Field1 的名字,所有与之相关的内容都会被更新,至少错误会在编译过程中被发现。 谢谢
信奎爷,无所畏惧!!
答案
-
-
可以找一个比较 Tricky 的方法。例如,为需要动态获取 Fieldinfo 的字段创建一个 Attribute,如:
public class DynamicFieldInfoAttribute : Attribute
然后再代码中标记:
public class MyClass
{
[DynamicFieldInfo]
public int MyField;
}然后需要在得到 FieldInfo 的地方,利用 Attribute.GetCustomAttribute() 得到哪个 Field 上附加了这个 Attribute,那么也就得到了这个 Field 的 FieldInfo 了。
Mark Zhou- 已标记为答案 Charles Shao 2011年4月5日 9:49
-
可以找一个比较 Tricky 的方法。例如,为需要动态获取 Fieldinfo 的字段创建一个 Attribute,如:
Attribute.GetCustomAttribute() 得到哪个 Field 上附加了这个 Attribute,那么也就得到了这个 Field 的 FieldInfo 了。
Mark Zhou
Dear Zhou。非常感谢你的建议,它的确可以间接的实现我想要的功能。 不过他会额外增加另外的代码开发成本,而且也让代码更加难懂了。看来C# 确实是无法办到了。希望.Net5.0 能增加一个运算符getfield( Obj.Field1) 就像 typeof( Myclass)一样。。嘿嘿。最后的结论就是我认了。就保留现在的做法不变,并且在开发说明文件中增加相应的特别提示。但愿今后的开发人员能够注意到这点:P
信奎爷,无所畏惧!!- 已标记为答案 Charles Shao 2011年4月5日 9:49
全部回复
-
-
可以找一个比较 Tricky 的方法。例如,为需要动态获取 Fieldinfo 的字段创建一个 Attribute,如:
public class DynamicFieldInfoAttribute : Attribute
然后再代码中标记:
public class MyClass
{
[DynamicFieldInfo]
public int MyField;
}然后需要在得到 FieldInfo 的地方,利用 Attribute.GetCustomAttribute() 得到哪个 Field 上附加了这个 Attribute,那么也就得到了这个 Field 的 FieldInfo 了。
Mark Zhou- 已标记为答案 Charles Shao 2011年4月5日 9:49
-
可以找一个比较 Tricky 的方法。例如,为需要动态获取 Fieldinfo 的字段创建一个 Attribute,如:
Attribute.GetCustomAttribute() 得到哪个 Field 上附加了这个 Attribute,那么也就得到了这个 Field 的 FieldInfo 了。
Mark Zhou
Dear Zhou。非常感谢你的建议,它的确可以间接的实现我想要的功能。 不过他会额外增加另外的代码开发成本,而且也让代码更加难懂了。看来C# 确实是无法办到了。希望.Net5.0 能增加一个运算符getfield( Obj.Field1) 就像 typeof( Myclass)一样。。嘿嘿。最后的结论就是我认了。就保留现在的做法不变,并且在开发说明文件中增加相应的特别提示。但愿今后的开发人员能够注意到这点:P
信奎爷,无所畏惧!!- 已标记为答案 Charles Shao 2011年4月5日 9:49