在C#中如何在List<Tuple<string, string>>中搜索字符串。

14

我正在经历一个

        List<Tuple<string,string>> tr = new List<Tuple<string,string>>();
        tr.Add(new Tuple<string, string>("Test","Add");
        tr.Add(new Tuple<string, string>("Welcome","Update");

        foreach (var lst in tr)
         {
             if(lst.Contains("Test"))
              MessageBox.Show("Value Avail");

          }

我在做这件事时失败了,...


1
"failed" 是什么意思? - Robert Harvey
问题到底是什么? - Stian Standahl
1
你在这里发布的代码有很多编译错误。缺少 ')',lst显然没有包含Contains的定义。你应该发布可以编译的代码,然后展示你的问题。Konstantin下面的答案解决了你的问题。 - Ravi Y
7个回答

16

如果您想使用LINQ:

if(tr.Any(t => t.Item1 == "Test" || t.Item2 == "Test"))
    MessageBox.Show("Value Avail");

这样做的好处是,如果多次找到相同的文本(如果需要),则只会显示一次消息框。

10

可能这个可以工作:

foreach (var lst in tr)
{        
    if (lst.Item1.Equals("Test"))        
        MessageBox.Show("Value Avail");
}

或者这个

if (lst.Item1.Equals("Test") || lst.Item2.Equals("Test"))

请阅读元组类;你需要通过Item1和/或Item2属性访问元组中的值。


为什么要使用元组?也许这更容易:

Dictionary<string, string> dict = new Dictionary<string, string>
{
    {"Test", "Add"},
    {"Welcome", "Update"}
};

if (dict.ContainsKey("Test"))
{
    MessageBox.Show("Value Avail:\t"+dict["Test"]);
}

适用于 List<(string A, string B)> 吗? - Kiquenet

2
List<Tuple<string,string>> tr = new List<Tuple<string,string>>();
tr.Add(new Tuple<string, string>("Test","Add");
tr.Add(new Tuple<string, string>("Welcome","Update");
var index = tr.FindIndex(s=>s.Item1 == "Test" || s.Item2 == "Test");
if(index != -1)
MessageBox.Show("Value Avail");

使用FindIndex,您可以同时检查元素的可用性和索引。

1
也许这可以帮助其他人。以下是我采用的方法:
List<Tuple<string,string>> tr = new List<Tuple<string,string>>();
tr.Add(new Tuple<string, string>("Test","Add");
tr.Add(new Tuple<string, string>("Welcome","Update");

if(lst.Any(c => c.Item1.Contains("Test")))
    MessageBox.Show("Value Avail");

(版权归此处所有)


1

应该是 foreach (var lst in tr) 而不是 lstEvntType,你应该测试元组的 Item1 字段。


0

为什么你要迭代lstEvntType而不是tr?你应该尝试这样做:

List<Tuple<string,string>> tr = new List<Tuple<string,string>>();
tr.Add(new Tuple<string, string>("Test","Add"));
tr.Add(new Tuple<string, string>("Welcome","Update"));
List<Tuple<string,string>>  lstEvntType = new List<Tuple<string,string>>();

    foreach (var lst in tr)
    {
        if(lst.Item1.Equals("Test"))
            MessageBox.Show("Value Avail");
    }

0

更改

if(lst.Contains("Test"))

 if(lst.Item1.Contains("Test") ||  lst.Item2.Contains("Test"))

如果元组有更多的项,那么你需要为所有的项添加条件。

如果你想将其应用于所有元组,你需要使用反射(和 古怪的方法)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接