C# 如何在列表中搜索字符串<;元组<;字符串,字符串>&燃气轮机;在C中#

C# 如何在列表中搜索字符串<;元组<;字符串,字符串>&燃气轮机;在C中#,c#,list,tuples,C#,List,Tuples,我正在吃晚饭 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"); foreac

我正在吃晚饭

        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");

          }
List tr=newlist();
tr.Add(新元组(“测试”、“添加”);
tr.Add(新元组(“欢迎”、“更新”);
foreach(tr中的var lst)
{
如果(lst.包含(“测试”))
MessageBox.Show(“值有效”);
}

我做这件事失败了,…。

也许这应该行得通:

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"]);
}
Dictionary dict=新字典
{
{“测试”,“添加”},
{“欢迎”,“更新”}
};
if(dict.ContainsKey(“测试”))
{
MessageBox.Show(“有效值:\t”+dict[“Test”]);
}

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

为什么要迭代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");
    }
List tr=newlist();
tr.Add(新元组(“Test”,“Add”));
tr.Add(新元组(“欢迎”、“更新”);
List lstEvntType=新列表();
foreach(tr中的var lst)
{
如果(第一项1等于(“测试”))
MessageBox.Show(“值有效”);
}
更改

if(lst.Contains("Test"))

若元组有更多项,则需要为所有项添加条件


如果要使所有元组通用,则需要使用反射(和)。

如果要使用LINQ:

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

如果文本被多次找到(如果需要的话),这也将有一个好处,即只显示一次消息框。

这可能会帮助其他人。以下是我使用的方法:

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");
List tr=newlist();
tr.Add(新元组(“测试”、“添加”);
tr.Add(新元组(“欢迎”、“更新”);
if(lst.Any(c=>c.Item1.Contains(“Test”))
MessageBox.Show(“值有效”);
(值得一提的是)

List tr=newlist();
tr.Add(新元组(“测试”、“添加”);
tr.Add(新元组(“欢迎”、“更新”);
var index=tr.FindIndex(s=>s.Item1==“Test”| | s.Item2==“Test”);
如果(索引!=-1)
MessageBox.Show(“值有效”);

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

失败是什么意思?到底是什么问题?您发布的代码有很多编译错误。缺少“)很明显,lst不包含包含的定义。您应该发布可以编译的代码,然后显示您的问题。康斯坦丁下面的回答解决了您的问题。
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");
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");