0

IEnumerable コレクションがあります。LINQ を使用して、Web サービスの応答からコレクションを作成しています。以下は私が使用しているサンプルです。

lookupData = from data in content["data"].Children()
             select new LookupData
             {
                 LookupKey = (data["data"]["key"]).ToString(),
                 LookupValue = (string)data["data"]["name"]
             };

キーと値を返す多くの同様の応答に同じコードを使用します。

ここで、いくつかの応答 (すべてではない) に対して、サービス応答から追加のフィールドが必要になったシナリオが得られました。そこで、「LookUpData」クラスに「Optional」プロパティを作成し、以下のように使用しました。

lookupData = from data in content["data"].Children()
             select new LookupData
             {
                 LookupKey = (data["data"]["key"]).ToString(),
                 LookupValue = (string)data["data"]["name"],
                 Optional = referenceConfig.Optional != null 
                            ? (data["data"]["optional"]).ToString()
                            : String.Empty
             };

ここでの null チェックはパフォーマンスの問題です。他の条件があり、一緒に非常に大きな if else ループになるため、以下を使用したくありません。

if(referenceConfig.Optional != null){

       lookupData = from data in content["data"].Children()
                     select new LookupData
                     {
                         LookupKey = (data["data"]["key"]).ToString(),
                         LookupValue = (string)data["data"]["name"],
                         Optional = (data["data"]["optional"]).ToString()
                     };
}
else{
       lookupData = from data in content["data"].Children()
                     select new LookupData
                     {
                         LookupKey = (data["data"]["key"]).ToString(),
                         LookupValue = (string)data["data"]["name"]
                     };
}

しかし、それぞれに大量のデータを含む少なくとも 10 の Web サーバー応答があります。

4

1 に答える 1

0

referenceConfig.Optionalコンパイル時に値が利用可能な場合は、次のことができます

    #if OPTIONAL

    ...

    #else

    ...

そうでない場合は、 Null オブジェクト パターンを実装できます。つまり、すべての["data"][...]プロパティが常に値を返すようにすることができます (たとえば、型が文字列の場合は string.Empty)。コードで明示的にチェックする必要はありません。

于 2013-02-15T14:01:22.810 に答える