首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取NullReferenceException

获取NullReferenceException
EN

Stack Overflow用户
提问于 2012-07-23 19:48:14
回答 4查看 4.5K关注 0票数 5

我得到了这个:

代码语言:javascript
复制
    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();上。在此之前,我必须检查是否为空吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-23 19:52:08

我要冒险一试,并建议在values中没有使用提供的property.Name的属性。因此,您对values.GetValue的调用返回一个null。当您尝试对该空值执行ToString()时,它会报错。

简而言之,您的values变量包含什么?

更新:

根据提供的values是一个FormsCollection的信息,很可能您的属性集合包含一些没有FormsCollection字段的属性。发生的情况是,你试图获取这个字段,它返回一个空值,然后你对它调用ToString,导致所有东西都崩溃了。

我会反转我的策略,循环遍历我的FormsCollection,在遇到属性时逐个获取它们。另一种方法是保持它的原样,并在执行ToString之前检查是否为null。

PS:我希望你在表单中表示的所有属性都是字符串,否则事情就会崩溃。

票数 3
EN

Stack Overflow用户

发布于 2012-07-23 19:50:09

在此之前,我必须检查空值吗?

在这一行上,是:

代码语言:javascript
复制
string val = values.GetValue(property.Name).ToString()

很简单,因为该特定属性的值可以是null

票数 4
EN

Stack Overflow用户

发布于 2012-07-23 19:51:43

为什么要强制使用.ToString()null对于大多数事情来说都是完全合法的。不清楚values是什么,所以我假设它来自您自己的代码,但是:

代码语言:javascript
复制
object val = values.GetValue(property.Name);
property.SetValue(report, val, null);

根据values是什么,你可能还想检查“有一个值,也就是null”和“没有任何定义的值”之间的区别。就我个人而言,我希望这样做:

代码语言:javascript
复制
object val;
if(values.TryGetValue(property.Name, out val)) {
    property.SetValue(report, val, null);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11611936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档