运算符“==”不能应用于类型为“键值对”和“字符串”的操作数

本文关键字:键值对 字符串 操作数 类型 不能 应用于 运算符 | 更新日期: 2023-09-27 18:35:11

这个问题可能看起来是重复的和/或太无聊,但我想使用这个特定的方法来做到这一点。

当用户在文本框中输入字符串时,我想获取此字符串键。为此,我创建了一个具有 n (n <= 15000) 唯一值的字典。我想按值从此字典中获取密钥。下面的方法效果很好:

Dictionary<int, string> artikullar = new Dictionary<int, string>();
int key = (from elem in artikullar where elem.Value == txt_artikul.Text select elem).First().Key;

在此之前,我尝试使用 First() 方法来获取密钥:

int key = artikullar.AsParallel().First(new Func<KeyValuePair<int, string>, bool>(val => val == txt_artikul.Text)).Key;

但它抛出此错误:

运算符"=="不能应用于类型为"键值对"和"字符串"的操作数

我以前没有使用过这种方法。

任何有用的评论或答案将不胜感激。

运算符“==”不能应用于类型为“键值对”和“字符串”的操作数

Ehsan Sajjad是正确的。但我想补充一点:

说你Dictionary中的字符串是独一无二的。我不知道您何时创建了Dictionary,以及数据是静态的还是一直在动态变化的。

如果它是静态的并且字符串是唯一的,您可以考虑创建一个反向Dictionary,如下所示:

Dictionary<string, int> reversedDict = artikullar.ToDictionary(
    kvp => kvp.Value,
    kvp => kvp.Key);

然后使用它进行查找:

int key = reversedDict[txt_artikul.Text];

这可能比查询原始字典更快。

你必须改变:

val => val == txt_artikul.Text

自:

val = > val.Value == txt_artikul.Text

你有KeyValuePair的实例,你必须在lambda表达式中指定要比较的Value