我得到了这个:
private object setReportValues(object report, FormCollection values)
{
PropertyInfo[] properties = report.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
string val = values.GetValue(property.Name).ToString();
property.SetValue(report, val, null);
}
return report;
}异常发生在string val = values.GetValue(property.Name).ToString();上。在此之前,我必须检查是否为空吗?
发布于 2012-07-23 19:52:08
我要冒险一试,并建议在values中没有使用提供的property.Name的属性。因此,您对values.GetValue的调用返回一个null。当您尝试对该空值执行ToString()时,它会报错。
简而言之,您的values变量包含什么?
更新:
根据提供的values是一个FormsCollection的信息,很可能您的属性集合包含一些没有FormsCollection字段的属性。发生的情况是,你试图获取这个字段,它返回一个空值,然后你对它调用ToString,导致所有东西都崩溃了。
我会反转我的策略,循环遍历我的FormsCollection,在遇到属性时逐个获取它们。另一种方法是保持它的原样,并在执行ToString之前检查是否为null。
PS:我希望你在表单中表示的所有属性都是字符串,否则事情就会崩溃。
发布于 2012-07-23 19:50:09
在此之前,我必须检查空值吗?
在这一行上,是:
string val = values.GetValue(property.Name).ToString()很简单,因为该特定属性的值可以是null。
发布于 2012-07-23 19:51:43
为什么要强制使用.ToString()?null对于大多数事情来说都是完全合法的。不清楚values是什么,所以我假设它来自您自己的代码,但是:
object val = values.GetValue(property.Name);
property.SetValue(report, val, null);根据values是什么,你可能还想检查“有一个值,也就是null”和“没有任何定义的值”之间的区别。就我个人而言,我希望这样做:
object val;
if(values.TryGetValue(property.Name, out val)) {
property.SetValue(report, val, null);
}https://stackoverflow.com/questions/11611936
复制相似问题