.net字典获取不带Linq的值的键

.net字典获取不带Linq的值的键,.net,dictionary,.net,Dictionary,我可以找到很多关于如何使用Linq在字典中查找给定值的键的示例。然而,我们的代码必须跨平台运行,Linq不能在我们的大多数目标上工作 那么,是否有任何人(最好是VB)的代码可以使用任何字典并返回keyForValue?“第一个匹配”是我们所需要的,因为值是唯一的。在VB中没有经验,所以我用C#回答,希望您能转换它: public TKey GetKeyForValue<TKey,TValue>(Dictionary<TKey, TValue> dictionary, TV

我可以找到很多关于如何使用Linq在字典中查找给定值的键的示例。然而,我们的代码必须跨平台运行,Linq不能在我们的大多数目标上工作


那么,是否有任何人(最好是VB)的代码可以使用任何字典并返回
keyForValue
?“第一个匹配”是我们所需要的,因为值是唯一的。

在VB中没有经验,所以我用C#回答,希望您能转换它:

public TKey GetKeyForValue<TKey,TValue>(Dictionary<TKey, TValue> dictionary, TValue val)
{
    foreach(KeyValuePair<TKey, TValue> kvp in dictionary)
        if (kvp.Value == val) return kvp.Key;
    return default(TKey); // or throw an appropriate exception for not having found the key
}
public TKey GetKeyForValue(字典,TValue val)
{
foreach(字典中的KeyValuePair kvp)
如果(kvp.Value==val)返回kvp.Key;
返回default(TKey);//或因未找到该键而引发适当的异常
}

这将遍历字典中的
KeyValuePair
s,并返回第一个匹配值的键,而不使用LINQ。

在VB中没有这样的经验,因此我用C#回答,希望您能转换它:

public TKey GetKeyForValue<TKey,TValue>(Dictionary<TKey, TValue> dictionary, TValue val)
{
    foreach(KeyValuePair<TKey, TValue> kvp in dictionary)
        if (kvp.Value == val) return kvp.Key;
    return default(TKey); // or throw an appropriate exception for not having found the key
}
public TKey GetKeyForValue(字典,TValue val)
{
foreach(字典中的KeyValuePair kvp)
如果(kvp.Value==val)返回kvp.Key;
返回default(TKey);//或因未找到该键而引发适当的异常
}

这将遍历字典中的
KeyValuePair
s,并返回第一个匹配值的键(不带LINQ)。

它是IDictionary还是IDictionary(通用)键? 对于第一种情况,您需要遍历存储的实例,这些实例属于DictionaryEntry类型:

foreach (var e in dict.OfType<DictionaryEntry>())
{
    if (e.Value == "target")
    {
    }
}

它是IDictionary还是IDictionary(泛型)的? 对于第一种情况,您需要遍历存储的实例,这些实例属于DictionaryEntry类型:

foreach (var e in dict.OfType<DictionaryEntry>())
{
    if (e.Value == "target")
    {
    }
}
一行查询:

在C#中:

在VB中:

key =  myDict.Keys.ToList()(myDict.Values.ToList().IndexOf(value))
一行查询:

在C#中:

在VB中:

key =  myDict.Keys.ToList()(myDict.Values.ToList().IndexOf(value))

不确定是否可以保证两个集合中项目的顺序相同。之前已测试过。已测试!=保证。试着证明相反!(或查看源代码)它可以在将来的版本中更改。我完全相信它现在能起作用。尽管我承认团队不太可能改变这一点,因为担心会破坏代码,这取决于未记录的事实,例如这段代码。不确定是否可以保证两个集合中的项目顺序相同。它以前已经测试过。测试!=保证。试着证明相反!(或查看源代码)它可以在将来的版本中更改。我完全相信它现在能起作用。尽管我承认团队不太可能改变这一点,因为他们害怕破坏依赖于未记录事实的代码,比如这段代码。