我已经搜索并尝试了几个小时,但现在对我来说这没有意义。 基本上,我在.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”为空。 任何帮助都非常感谢。 谢谢
答案 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)
对您表示敬意。我的错。抱歉。 确实是一个命名问题。
通过复制和粘贴,我在字符串属性中创建了空格。所以我在寻找
“来源”
而不是
“来源”
。
->删除多余的空白可以解决问题。