如何在一个if语句中检查textbox + numbers.Any()
的组合,使其与控件的名称匹配?
foreach (Control con in this.Controls)
{
if (con is TextBox)
{
if (con.Name == "textBox" + numbers.Any())
{
MessageBox.Show("Something");
}
}
}
这些是数字:
string[] numbers = new string[5] { "3", "4", "5", "6", "7" };
答案 0 :(得分:4)
如果存在要枚举的内容,则带有空参数的Any()
重载将返回true。此外,它返回一个布尔值,所以如果你连接一个字符串的方式,你的if条件看起来像这样:
if(con.Name == "textBoxTrue")
//or
if(con.Name == "textBoxFalse")
所以你必须像Oliver所展示的那样。 另一个(更短)选项是:
if (numbers.Any(n => con.Name == "textBox" + n))
{
MessageBox.Show("Something");
}
整个foreach
事物可以写成一行(这是Linq帮助的地方):
foreach (var x in this.Controls
.OfType<TextBox>()
.Where(con => numbers.Any(n => con.Name == "textBox" + n)))
{
MessageBox.Show("Something");
}
但是,如果您正在做的事情是更复杂的事情,那么为了便于阅读,最好写foreach
。
您还可以利用C#提供的各种数组初始化语法。在向阵列添加元素时指定大小使其几乎没有多余。 See this。所以它只需要:
var numbers = new[] { "3", "4", "5", "6", "7" }; //may replace var with string[]
//or
string[] numbers = { "3", "4", "5", "6", "7" };
而不是
string[] numbers = new string[5] { "3", "4", "5", "6", "7" };
答案 1 :(得分:3)
尝试:
numbers.Select(n => string.Format("textBox{0}", n)).Contains(con.Name);
答案 2 :(得分:0)
您也可以使用:
var a="textBox5".Split(new string[]{"textBox"},StringSplitOptions.RemoveEmptyEntries);
if (a.Length==2) && numbers.Contains(a[1]))
{
// exists...
}