拡張メソッドを作成する場合、もちろん、それを呼び出すことができnull
ます。ただし、インスタンスメソッドの呼び出しとは異なり、nullで呼び出す場合、aをスローする必要はありませんNullReferenceException
->手動でチェックしてスローする必要があります。
Linq拡張メソッドの実装について、Any()
MicrosoftはArgumentNullException
(https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/AnyAll.cs)をスローすることを決定しました。
書かなければならないのはイライラする if( myCollection != null && myCollection.Any() )
このコードのクライアントとして、例えば((int[])null).Any()
戻るべきだと期待するのは間違っていますfalse
か?
null |> Seq.isEmpty
throwsを使用しSystem.ArgumentNullException: Value cannot be null
ます。期待されるのは、存在すると予想されるものに対して未定義の値を渡さないことであるため、nullがある場合は例外です。初期化の問題であれば、の代わりに空のシーケンスで開始しnull
ます。
null
、コレクションを処理するときに戻るべきではなく、そのような場合は空のコレクションを使用する必要があります。
Any
ただ一貫しています。