1

次のコードを実行しようとしていますが、myObject が != null の場合は正常に動作しますが、myObject が null の場合は「値を null にすることはできません」というエラーがスローされます。理想的には、myObject が null の場合、HashSet に単一の値 0 を持たせたいと思います。

var ids = new HashSet<int>(myObject.Select(p => p.ID));

私はいくつかの異なることを試しました。なぜこれがうまくいくと思ったのかわかりません。

var ids = new HashSet<int>(myObject.Select(p => p.ID).Where(p => p != null));

そして、これはうまくいくように見えました。

var ids = new HashSet<int>(myObject.Select(p => (p == null) ? 0 : p.ID));

最終的にはこれでうまくいきましたが、もっと良い方法が必要なようです。

var ids = new HashSet<int>(myObject!= null ? myObject.Select(p => p.ID) : new int[] {0});

誰にもこれを行うためのより良い方法がありますか?

4

2 に答える 2

1

myObject が null の場合、コードは次のように変換されます

var ids = new HashSet<int>(null.Select(p => p.ID));

null 以外の Select 拡張メソッドを使用することはできません。

あなたの代替

var ids = new HashSet<int>(myObject!= null ? myObject.Select(p => p.ID) : new int[] {0});

あなたの要件を満たすために私が知っている最もコンパクトな形式ですが、必要に応じてメソッドまたは拡張メソッドでその複雑さを隠すことができます.

于 2012-07-24T02:42:34.557 に答える