0

文字列に選択しているLinqクエリがあります。もちろん、文字列にはnullを含めることができます。

では、nullを検出した場合に、Linqクエリ内で例外をスローする方法はありますか?

nullを許可しない属性でクラスを装飾できますか?

Linqクエリをtrycatchでラップしたいのですが、nullが検出されるとすぐに、catchに入り、処理できるようになります。

編集

これが私のLinqクエリです。現在は非常に簡単です。これを拡張しますが、これは基本的な形状を示しています。

var localText = from t in items select new Items { item = t.name }

基本的にアイテムはt.nameに設定され、t.nameは文字列であるため、空になる可能性があります/ nullは、文字列と文字列がNULLを保持できるため、これは完全に合法です。

したがって、NULLが返された場合は、例外をスローする必要があります。実際には、NULLまたは空の例外をスローできると便利です。

「nullを受け入れない」などのプロパティの上に設定できる属性を覚えているようですが?

編集

私はそれを見つけたと思います:http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.aspx

これはnullまたは文字列を許可しないため、例外がスローされると思います。これをMVCで使用しましたが、標準クラスで使用できるかどうかはわかりません。

4

3 に答える 3

1

nullである文字列は特に例外ではないため、次のようなことができます。

var items = myStrings.Where(s => !string.IsNullOrEmpty(s)).Select(s => new Item(s));

アップデート

XMLファイルからこのデータを読み取る場合は、LINQ to XMLを調べ、文字列を含まない要素または属性に例外をスローするのではなく、XSDを使用してXMLファイルを検証する必要があります

于 2011-03-28T22:02:29.213 に答える
0

意図的にNullReferenceExceptionを生成してみることができます。

try
{
    //Doesn't change the output, but throws if that string is null.
    myStrings.Select(s=>s.ToString());
}
catch(NullReferenceException ex)
{
   ...
}

nullの場合にスローする文字列に追加できる拡張メソッドを作成することもできます。

public static void ThrowIfNull(this string s, Exception ex)
{
    if(s == null) throw ex;
}

...

myString.ThrowIfNull(new NullReferenceException());
于 2011-03-28T21:49:23.450 に答える
0

この場合、なぜ例外をスローしたいのですか?これは、そもそも起こってはならないことのために、お風呂の水で赤ちゃんを捨てるようなものです。

null /空のアイテムがあることを検出したいだけの場合:

int nullCount= items.Count( x=> string.IsNullOrEmpty(x.name));

それらを除外したい場合:

var localText = from t in items where !string.IsNullOrEmpty(t.name) select new Items { item = t.name };
于 2011-03-28T21:59:13.020 に答える