我正在尝试使用反射来获取Byte []。不幸的是结果总是NULL。该物业充满了数据。这是我的代码片段。
public static void SaveFile(BusinessObject document)
{
Type boType = document.GetType();
PropertyInfo[] propertyInfo = boType.GetProperties();
Object obj = Activator.CreateInstance(boType);
foreach (PropertyInfo item in propertyInfo)
{
Type xy = item.PropertyType;
if (String.Equals(item.Name, "Content") && (item.PropertyType == typeof(Byte[])))
{
Byte[] content = item.GetValue(obj, null) as Byte[];
}
}
return true;
}
这是工作代码:
public static void SaveFile(BusinessObject document)
{
Type boType = document.GetType();
PropertyInfo[] propertyInfo = boType.GetProperties();
foreach (PropertyInfo item in propertyInfo)
{
if (String.Equals(item.Name, "Content") && (item.PropertyType == typeof(Byte[])))
{
Byte[] content = item.GetValue(document, null) as Byte[];
}
}
}
答案 0 :(得分:4)
你的代码看起来很奇怪。您正在创建参数类型的 new 实例,并尝试从该实例获取值。您应该使用参数本身:
public static void SaveFile(BusinessObject document)
{
Type boType = document.GetType();
PropertyInfo[] propertyInfo = boType.GetProperties();
foreach (PropertyInfo item in propertyInfo)
{
Type xy = item.PropertyType;
if (String.Equals(item.Name, "Content") &&
(item.PropertyType == typeof(Byte[])))
{
Byte[] content = item.GetValue(document, null) as Byte[];
}
}
}
顺便说一句:
return true
的方法中的void
是非法的,会导致编译错误。您的案例中无需使用反射。你可以写下这个:
public static void SaveFile(BusinessObject document)
{
Byte[] content = document.Content;
// do something with content.
}
只有在Content
上定义BusinessObject
且不仅在派生类上定义时,才会出现这种情况。
答案 1 :(得分:1)
从您的代码段开始,您似乎没有填充任何值。
Object obj = Activator.CreateInstance(boType);
这只会调用默认的consturctor并为所有类型分配默认值。 对于byte [],它是 null
应该是
item.GetValue(document, null)