获取 NullReferenceException

lol*_*lli 5 c#

我得到这个:

    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;
    }
Run Code Online (Sandbox Code Playgroud)

异常开启string val = values.GetValue(property.Name).ToString();。我之前必须检查空值吗?

Mit*_*hon 3

我要冒险并建议没有提供的property.Name财产values。所以你对values.GetValue的调用返回一个null。当您尝试对该 null 值执行 ToString() 时,它会抱怨。

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

更新:

根据提供的信息,values 是 FormsCollection,您的属性集合很可能包含一些您没有 FormsCollection 字段的属性。发生的情况是,您尝试获取此字段,它返回一个空值,然后您对其调用 ToString,导致一切都中断。

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

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

  • 谢谢,将 `prop.GetValue(instance).ToString()` 更改为 `prop.GetValue(instance)?.ToString() ?? null`在我的地方成功了...... (3认同)