我尝试getField,但总是返回null。下面是代码的图像和变量的监视。产品编号:FieldInfo xSortField = xFieldInfo.GetValue(x).GetType().GetField(this.prefixedSortBy[i]);
FieldInfo xSortField = xFieldInfo.GetValue(x).GetType().GetField(this.prefixedSortBy[i]);
ws51t4hk1#
您需要使用BindingFlags
GetField("FieldName", BindingFlags.Instance | BindingFlags.Public);
5us2dqdw2#
我认为你需要更仔细地看看你在做什么,因为它似乎没有多大意义。xFieldInfo.GetValue(x)返回装箱的整数2。GetType()则返回typeof(int)然后,您尝试为int上的字段ssId获取FieldInfo。这不存在。看起来你是故意的:
xFieldInfo.GetValue(x)
2
GetType()
typeof(int)
int
ssId
FieldInfo
FieldInfo xSortField = x.GetType().GetField(this.prefixedSortBy[i])
h5qlskok3#
您必须指定BindingFlags.Instance或BindingFlags.Static作为第二个参数以获取返回值。BindingFlags.NonPublic也应该用于获取非公共字段。请参见MSDN以获取参考。
BindingFlags.Instance
BindingFlags.Static
BindingFlags.NonPublic
fbcarpbf4#
除了前面的答案外,字段和属性之间有明显的区别。试图获取属性但使用GetField()将导致null。要获取属性信息,请执行以下操作:var property = obj.GetType().GetProperty(fieldName);要获取字段/属性的值,可以使用如下方法:
var property = obj.GetType().GetProperty(fieldName);
public static T? GetFieldValue<T>(object obj, string fieldName) where T : struct { var property = obj.GetType().GetProperty(fieldName); if (property != null) { if (property.PropertyType == typeof(T)) { return (T)property.GetValue(obj); } return null; } var field = obj.GetType().GetField(fieldName); if (field != null && field.FieldType == typeof(T)) { return (T)field.GetValue(obj); } return null; }
4条答案
按热度按时间ws51t4hk1#
您需要使用BindingFlags
5us2dqdw2#
我认为你需要更仔细地看看你在做什么,因为它似乎没有多大意义。
xFieldInfo.GetValue(x)
返回装箱的整数2
。GetType()
则返回typeof(int)
然后,您尝试为
int
上的字段ssId
获取FieldInfo
。这不存在。看起来你是故意的:
h5qlskok3#
您必须指定
BindingFlags.Instance
或BindingFlags.Static
作为第二个参数以获取返回值。BindingFlags.NonPublic
也应该用于获取非公共字段。请参见MSDN以获取参考。
fbcarpbf4#
除了前面的答案外,字段和属性之间有明显的区别。试图获取属性但使用GetField()将导致null。
要获取属性信息,请执行以下操作:
var property = obj.GetType().GetProperty(fieldName);
要获取字段/属性的值,可以使用如下方法: