我有一个Enumerable<KeyValuePair<TKey, TValue>>。我想创建一个bool TryGetValue(TKey, out TValue)扩展方法,就像它在Dictionary<TKey, TValue>中可用一样。
我试过了
public static bool TryGetValue<TKey, TValue>
(this Enumerable<KeyValuePair<TKey, TValue>> mapping, TKey key, out TValue value)
{
bool retVal = false;
KeyValuePair<TKey, TValue> kvp;
kvp = mapping.First(x => x.Key.Equals(key));
if(kvp.Key == null && kvp.Value == null)
{
retVal = false;
value = default(TValue);
}
else
{
retVal = true;
value = kvp.Value;
}
return retval;
}这样做对吗?如果没有,请推荐一个。
注:
我不能使用字典,因为钥匙是重复的。而且,它只会返回第一个匹配值?
What happens to the rest?
我们可以离开他们。我正在发送从一个KeyValuePair创建的DataTable。我正在使用DataTable在其查询中使用order by columnname创建该order by columnname。
发布于 2012-07-31 10:58:09
为什么不使用一个简单的foreach循环呢?
示例:
public static bool TryGetValue<TKey, TValue>
(this KeyValuePair<TKey, TValue>[] mapping, TKey key, out TValue value)
{
foreach(var kvp in mapping)
if (kvp.Key.Equals(key))
{
value = kvp.Value;
return true;
}
value = default(TValue);
return false;
}如果键由于.First()而不存在,那么您的实现将抛出一个异常,而FirstOrDefault()将是丑陋的,因为KeyValuePair是一个结构,因此不能将其与null进行比较。
Sidenote:
与扩展KeyValuePair<TKey, TValue>[]不同,您可能希望使用IEnumerable<KeyValuePair<TKey, TValue>>来提高灵活性。
https://stackoverflow.com/questions/11738387
复制相似问题