5

私はこれを得ています:

    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();です。前にヌルをチェックする必要がありますか?

4

4 に答える 4

4

前にヌルをチェックする必要がありますか?

この行では、はい:

string val = values.GetValue(property.Name).ToString()

その特定のプロパティの値がになる可能null性があるためです。

于 2012-07-23T11:50:08.727 に答える
3

私は手足に出かけて、 で提供されているプロパティがないことを提案しproperty.Nameますvalues。したがって、values.GetValue への呼び出しは null を返します。その null 値に対して ToString() を実行しようとすると、エラーが発生します。

つまり、values 変数には何が含まれていますか?

アップデート:

値が FormsCollection であるという提供された情報を使用すると、プロパティ コレクションに FormsCollection フィールドがないいくつかのプロパティが含まれている可能性が非常に高くなります。そして、このフィールドを取得しようとすると、null 値が返され、その上で ToString を呼び出すと、すべてが壊れてしまいます。

戦略を逆にして、FormsCollection をループし、遭遇したプロパティを 1 つずつ取得します。別の方法は、ToString を実行する前に、それをそのままにして、null をチェックすることです。

PS: フォームに表示されるすべてのプロパティが文字列であることを願っています。そうしないと、問題が発生します。

于 2012-07-23T11:52:08.037 に答える
0

なぜあなたは強制するの.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);
}
于 2012-07-23T11:51:42.613 に答える