То, что вы хотите сделать, это:
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 было 6 миллионов записей, программа перебирает весь набор ключей для поиска правильной записи. В вашем случае, так как вы уже знаете ключ, вы должны использовать v.Responses[key]
, поскольку он чрезвычайно быстр (посмотрите, в каких случаях должны использоваться словари).