Nik*_*wal 1 .net c# extension-methods
我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?如果没有,请建议一个.
注意:
我不能使用字典,因为键是重复的.而且它只返回第一个匹配值?
What happens to the rest?
我们可以离开他们.我发送从DataTable创建的KeyValuePair.我order by columnname在其查询中使用DataTable创建.
为什么不使用简单的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;
}
Run Code Online (Sandbox Code Playgroud)
如果密钥由于不存在而导致您的实现将抛出异常.First(),并且FirstOrDefault()因为KeyValuePair是结构而难以实现,因此您无法将其与之进行比较null.
边注:
相反延伸KeyValuePair<TKey, TValue>[],你可能想使用IEnumerable<KeyValuePair<TKey, TValue>>,而不是变得更加灵活.
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |