我正在尝试使用反射获取一个字节[]。不幸的是,结果它总是为空。该属性填充了数据。这是我的代码片段。
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[];
}
}
}
你的代码看起来很奇怪。您正在创建参数类型的新实例,并尝试从该实例中获取值。您应该改用参数本身:
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[];
}
}
}
顺便说一句:
- 在返回
void
的方法中return true
是非法的,并且会导致编译器错误。 在您的情况下,无需使用反射。你可以简单地写这个:
public static void SaveFile(BusinessObject document) { Byte[] content = document.Content; // do something with content. }
仅当在
BusinessObject
而不是仅在派生类上定义Content
时,才如此。
从您的代码片段来看,您似乎没有填充任何值。
Object obj = Activator.CreateInstance(boType);
这只会调用默认构造器并为所有类型的分配默认值。对于字节[],它是空
的它应该是
item.GetValue(document, null)