有没有办法用Lambda表达式做这样的事情?
responses.Add(sr).Where(v.Responses.TryGetValue(v.responseType, out sr));
我想使用lambda表达式或三元运算符而不是典型的if表达式。
NB:
responses
是List<string>
类型。
v.Responses
是Dictionary
<enum ResponseType, string>
v
是某个对象
sr
是一个字符串。
答案 0 :(得分:2)
您想要做的是:
string sr;
if (v.Responses.TryGetValue(v.responseType, out sr))
responses.Add(sr);
无法简化语法并获得相同的性能。 但你可以这样做:
responses.AddRange( v.Responses.Where( p => p.Key == v.responseType )
.Select( p => p.Value ) );
你可能想要思考最后一个人在做什么,因为它有点愚蠢......
编辑:它之所以愚蠢是因为最后一个表达式转换为:
foreach(var pair in v.Responses)
{
if (pair.Key == v.responseType)
responses.Add(pair.Value);
}
因此,如果您的ResponseType枚举有600万个条目,程序将迭代整个键集以找到正确的条目。在您的情况下,由于您已经知道密钥,因此您应该使用v.Responses[key]
,因为它非常快(请参阅必须使用字典的情况)。
答案 1 :(得分:1)
LINQ不应该修改集合。
难道你不能简单地做这样的事情:
string sr;
if(v.Responses.TryGetValue(v.responseType, out sr))
responses.Add(sr);
答案 2 :(得分:0)
如果我理解你的问题,这可能就是你要找的。 p>
根据您的示例代码,我假设您的对象“v”包含RepsonseType类型的名为“responseType”的字段。
var responses = v.Responses
.Where(r => r.Key == v.responseType)
.Select(r => r.Value)
.ToList();