.net GetField返回null

azpvetkf  于 2023-03-31  发布在  .NET
关注(0)|答案(4)|浏览(309)

我尝试getField,但总是返回null。下面是代码的图像和变量的监视。
产品编号:FieldInfo xSortField = xFieldInfo.GetValue(x).GetType().GetField(this.prefixedSortBy[i]);

ws51t4hk

ws51t4hk1#

您需要使用BindingFlags

GetField("FieldName", BindingFlags.Instance | BindingFlags.Public);
5us2dqdw

5us2dqdw2#

我认为你需要更仔细地看看你在做什么,因为它似乎没有多大意义。
xFieldInfo.GetValue(x)返回装箱的整数2GetType()则返回typeof(int)
然后,您尝试为int上的字段ssId获取FieldInfo。这不存在。
看起来你是故意的:

FieldInfo xSortField = x.GetType().GetField(this.prefixedSortBy[i])
h5qlskok

h5qlskok3#

您必须指定BindingFlags.InstanceBindingFlags.Static作为第二个参数以获取返回值。
BindingFlags.NonPublic也应该用于获取非公共字段。
请参见MSDN以获取参考。

fbcarpbf

fbcarpbf4#

除了前面的答案外,字段和属性之间有明显的区别。试图获取属性但使用GetField()将导致null。
要获取属性信息,请执行以下操作:
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;
    }

相关问题