gpt4 book ai didi

c# - 创建 Enumerable> 的扩展方法 TryGetValue(TKey, out TValue) 就像 Dictionary

转载 作者:太空宇宙 更新时间:2023-11-03 20:24:02 28 4
gpt4 key购买 nike

我有一个 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?

我们可以离开他们。我正在发送从 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;
}

如果 key 因 .First() 而不存在,您的实现将抛出异常, 和 FirstOrDefault()KeyValuePair 以来会很丑陋是一个结构,因此您不能只将它与 null 进行比较.


旁注:

而不是扩展 KeyValuePair<TKey, TValue>[] , 你可能想使用 IEnumerable<KeyValuePair<TKey, TValue>>而是更加灵活。

关于c# - 创建 Enumerable<KeyValuePair<TKey, TValue>> 的扩展方法 TryGetValue(TKey, out TValue) 就像 Dictionary<TKey, TValue>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11738387/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com