我有一个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服务器响应,每个响应中包含大量数据。
答案 0 :(得分:0)
如果referenceConfig.Optional
的值在编译时可用,则可以执行
#if OPTIONAL
...
#else
...
如果没有 - 你可以实现Null Object Pattern,即你的所有["data"][...]
属性总是返回一个值(例如string.Empty,如果类型是字符串),所以你不会明确检查在代码中。