GetPropertyInfo的某些属性失败

时间:2018-11-24 21:53:07

标签: c#

我已经搜索并尝试了几个小时,但现在对我来说这没有意义。 基本上,我在.net 4.5项目中有两个类库。

使用反射时,我可以访问某些属性,但不能访问所有属性,也看不到我的错。

库A定义了数据结构:

   public class HeaderRow
    {
        public string Format { get; set; }
        public Int32 Version { get; set; } = 0;
        public CustomEnum Datacategory { get; set; }
        public Custom2Enum FormatnameEnum { get; set; }
        public  int Formatversion { get; set; }
        public UInt64 CreatedAt { get; set; } 
        public string Origin {get; set;}
    }

我想用以下代码填充库2:

 protected PropertyInfo FindPropertyInfo(object o, string propertyName)
        {
            Type objektTyp = o.GetType();

        PropertyInfo info = objektTyp.GetProperty(propertyName,BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic);
return info;
}

        public override void FillValueToColumns(object o, string property, string value)
        {
            FindPropertyInfo(o,property).SetValue(o,value);
        }

我可以访问: 格式而非原点 CreatedAt但不是Formatversion 而且我看不到我的自定义枚举。

对于所有这些,我都看不到“ info”为空。 任何帮助都非常感谢。 谢谢

2 个答案:

答案 0 :(得分:0)

您将无法使用SetValue将字符串分配给例如int。为此,您要么需要将int(例如)作为最后一个参数的FillValueToColumns重载,要么需要获取类型转换器,例如:

PropertyInfo propertyInfo = FindPropertyInfo(o,propertyName);    TypeConverter typeConverter = TypeDescriptor.GetConverter(propertyInfo.PropertyType);    对象v = typeConverter.ConvertFrom(null,CultureInfo.CurrentCulture,值??“”);    如果(v == null && propertyInfo.PropertyType.IsValueType && Nullable.GetUnderlyingType(propertyInfo.PropertyType)== null){         抛出新的InvalidCastException(“将null赋值给不可为null的值类型!”);    }    propertyInfo.SetValue(object,v);

sjb

答案 1 :(得分:0)

对您表示敬意。我的错。抱歉。 确实是一个命名问题。

通过复制和粘贴,我在字符串属性中创建了空格。所以我在寻找

  

“来源”

而不是

  

“来源”

->删除多余的空白可以解决问题。