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

这里的空检查是一个性能问题。我不想使用下面的,因为我还有其他条件,如果其他条件加在一起,它将变成一个非常大的 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

    ...

如果不是 - 您可以实现空对象模式,即让您的所有["data"][...]属性始终返回一个值(例如,如果类型为字符串,则为 string.Empty),这样您就不会在代码中显式检查。

于 2013-02-15T14:01:22.810 回答