2013-02-15 45 views
0

我有一个IEnumerable集合。 使用LINQ,我从Web服务响应填充集合。 下面是我使用的示例。在选择使用可空属性时的LINQ性能

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

我将使用相同的代码进行很多类似的响应,它将返回一个键和值。

现在,我得到了一个场景,当我需要从服务响应中为少数响应(不是所有)提供额外的字段时。所以,我在“LookUpData”类创建的“可选”的属性和使用如下:

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 
      }; 

这里的空检查是一个性能问题。我不想使用下面的内容,因为我有其他条件,所有它们将会成为一个非常大的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服务器响应,每个响应中都有大量数据。

+0

'content [“data”]的类型是什么?Children()'?如果“可选”不存在,那么索引器data [“data”] [“optional”]是否会引发异常? – 2013-02-15 12:35:38

+0

'这里的空检查是一个性能问题。“真的吗?如果是这样,影响有多大,为什么? – sgmoore 2013-02-15 14:53:18

回答

0

如果referenceConfig.Optional值可在编译的时候,你可以做

#if OPTIONAL 

    ... 

    #else 

    ... 

如果没有 - 你可以实现Null Object Pattern即把所有的["data"][...]属性总是返回一个值(例如,如果的String.Empty类型是字符串),所以你不会在代码中明确地检查。