3

というパブリッククラスがありProfileます。現在 2 つのプロパティを持つ非常に単純なモデル クラス。 string Namestring Fields。プロジェクトを開発するにつれて、クラスは拡張されますが、現時点では特に重要ではありません。

というGlobal static IListProfileがありProfilesます。これらのタイプのデータを操作するのは初めてIEnumerableですが、単一のプロファイルのプロパティの 1 つを更新しようとしています。次のことを試しましたが、オブジェクト参照が設定されていない例外を受け取りました。以下は、プロパティを設定する場所です。

Profiles.Single(x => x.Name == listBoxProfiles.Text).Fields = textBoxFieldName.Text;

デバッガーは、リストボックスとテキストボックスのテキストプロパティの両方が正しい値を持っていることを示しているので、シングルを使用している方法が間違っていると思います。

誰かが光を当てることができれば、私は感謝します.

4

1 に答える 1

1

コードをより防御的にするための簡単な修正が必要なすべてです。

var profile = Profiles.SingleOrDefault(x => x.Name == listBoxProfiles.Text);

if (profile != null)
{
    profile.Fields = textBoxFieldName.Text;
}
else
{
    Profiles.Add(new Profile(textBoxFieldName.Text));
}

このコードは欠損値に対処し、SingleOrDefault0 または 1 個のアイテムが返されることを期待しています。複数のアイテムが見つかった場合、例外がスローされます。

探しているアイテムがコードに常に含まれている必要があることがわかっている場合、コードは機能しますが、このスタイルのプログラミングには反対し、もう少し防御的であることをお勧めします。

于 2012-04-16T08:30:32.920 に答える