C# 来自多个Foreach的Linq
如何将以下多重C# 来自多个Foreach的Linq,c#,linq,C#,Linq,如何将以下多重foreach转换为LINQ foreach (var resourceOne in resourceList) { string s = (string)resourceOne; foreach (Control c in gridBtn.Children) { if (c.GetType() == typeof(ToggleButton)) {
foreach
转换为LINQ
foreach (var resourceOne in resourceList)
{
string s = (string)resourceOne;
foreach (Control c in gridBtn.Children)
{
if (c.GetType() == typeof(ToggleButton))
{
int TagPlusOne = Convert.ToInt32(c.Tag) + 1;
string PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
if (PaddedResult == s)
{
((ToggleButton)c).BorderBrush = Brushes.Red;
((ToggleButton)c).BorderThickness = new Thickness(3, 3, 3, 3);
}
}
}
}
实际上,您不能这样做,但是您可以简单地使用
Where
和of type
:
foreach (var in gridBtn.Children.OfType<ToggleButton>)
{
int TagPlusOne = Convert.ToInt32(c.Tag) + 1;
string PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
foreach (var resourceOne in resourceList.Where(x => x == PaddedResult))
{
c.BorderBrush = Brushes.Red;
c.BorderThickness = new Thickness(3, 3, 3, 3);
}
}
foreach(gridBtn.Children.OfType中的变量)
{
int-TagPlusOne=Convert.ToInt32(c.Tag)+1;
字符串PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
foreach(resourceList.Where中的var resourceOne(x=>x==PaddedResult))
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
}
}
免责声明:完全未经测试。您不能真的这样做,但是您可以简单地使用
Where
和类型
:
foreach (var in gridBtn.Children.OfType<ToggleButton>)
{
int TagPlusOne = Convert.ToInt32(c.Tag) + 1;
string PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
foreach (var resourceOne in resourceList.Where(x => x == PaddedResult))
{
c.BorderBrush = Brushes.Red;
c.BorderThickness = new Thickness(3, 3, 3, 3);
}
}
IEnumerable<ToggleButton> query =
from c in gridBtn.Children
where c.GetType() == typeof(ToggleButton)
let tagPlusOne = Convert.ToInt32(c.Tag) + 1
let paddedResult = tagPlusOne.ToString().PadLeft(3, '0')
join s in resourceList.Cast<string>() on paddedResult equals s
select c;
foreach(ToggleButton button in query)
{
button.BorderBrush = Brushes.Red;
button.BorderThickness = new Thickness(3, 3, 3, 3);
}
foreach(gridBtn.Children.OfType中的变量)
{
int-TagPlusOne=Convert.ToInt32(c.Tag)+1;
字符串PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
foreach(resourceList.Where中的var resourceOne(x=>x==PaddedResult))
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
}
}
免责声明:完全未经测试。IEnumerable查询=
IEnumerable<ToggleButton> query =
from c in gridBtn.Children
where c.GetType() == typeof(ToggleButton)
let tagPlusOne = Convert.ToInt32(c.Tag) + 1
let paddedResult = tagPlusOne.ToString().PadLeft(3, '0')
join s in resourceList.Cast<string>() on paddedResult equals s
select c;
foreach(ToggleButton button in query)
{
button.BorderBrush = Brushes.Red;
button.BorderThickness = new Thickness(3, 3, 3, 3);
}
从gridBtn.Children中的c开始
其中c.GetType()==typeof(ToggleButton)
让tagPlusOne=Convert.ToInt32(c.Tag)+1
让paddedResult=tagPlusOne.ToString().PadLeft(3,'0')
在paddedResult等于s的resourceList.Cast()中加入s
选择c;
foreach(查询中的ToggleButton按钮)
{
button.BorderBrush=画笔.Red;
button.BorderThickness=新厚度(3,3,3,3);
}
IEnumerable查询=
从gridBtn.Children中的c开始
其中c.GetType()==typeof(ToggleButton)
让tagPlusOne=Convert.ToInt32(c.Tag)+1
让paddedResult=tagPlusOne.ToString().PadLeft(3,'0')
在paddedResult等于s的resourceList.Cast()中加入s
选择c;
foreach(查询中的ToggleButton按钮)
{
button.BorderBrush=画笔.Red;
button.BorderThickness=新厚度(3,3,3,3);
}
您可以这样做(但我无法测试它,因为我没有您的环境):
您可以这样做(但我无法测试,因为我没有您的环境):
最后,您将需要一个
foreach
或类似工具来设置按钮上的属性,因为LINQ用于查询数据(通常无副作用),而不是对它们进行变异。但是,可以使用LINQ简化查找要编辑的按钮的过程。e、 g.您的代码可以归结为:
var targetButtons = gridBtn
.Children
.OfType<ToggleButton>()
.Where(tb => resourceList.OfType<string>().Contains($"{Convert.ToInt32(tb.Tag) + 1}:D3"));
foreach(var btn in targetButtons)
{
btn.BorderBrush = Brushes.Red;
btn.BorderThickness = new Thickness(3, 3, 3, 3);
}
var targetButtons=gridBtn
儿童
第()类
其中(tb=>resourceList.OfType()包含($“{Convert.ToInt32(tb.Tag)+1}:D3”);
foreach(目标按钮中的var btn)
{
btn.BorderBrush=画笔.红色;
btn.BorderThickness=新厚度(3,3,3,3);
}
可以进一步调整/优化/重构。注意,我已经用标准的D3数字格式字符串替换了
PadLeft(3,'0')
,其作用与此相同。最后,您需要一个foreach
或类似工具来设置按钮上的属性,因为LINQ用于查询数据(通常无副作用),而不是对它们进行变异。但是,可以使用LINQ简化查找要编辑的按钮的过程。e、 g.您的代码可以归结为:
var targetButtons = gridBtn
.Children
.OfType<ToggleButton>()
.Where(tb => resourceList.OfType<string>().Contains($"{Convert.ToInt32(tb.Tag) + 1}:D3"));
foreach(var btn in targetButtons)
{
btn.BorderBrush = Brushes.Red;
btn.BorderThickness = new Thickness(3, 3, 3, 3);
}
var targetButtons=gridBtn
儿童
第()类
其中(tb=>resourceList.OfType()包含($“{Convert.ToInt32(tb.Tag)+1}:D3”);
foreach(目标按钮中的var btn)
{
btn.BorderBrush=画笔.红色;
btn.BorderThickness=新厚度(3,3,3,3);
}
可以进一步调整/优化/重构。注:我已将
PadLeft(3,'0')
替换为D3
标准数字格式字符串,该字符串具有相同的功能。您可以使用此代码。我为按钮和WinForm测试了这样的代码。
我希望代码对您有所帮助
resourceList.Where(resourceOne =>
{
string s = (string)resourceOne;
gridBtn.Children.OfType<ToggleButton>().Where(c =>
{
var TagPlusOne = Convert.ToInt32(c.Tag) + 1;
var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
return PaddedResult == s;
}).ToList().ForEach(c =>
{
c.BorderBrush = Brushes.Red;
c.BorderThickness = new Thickness(3, 3, 3, 3);
});
return true;
});
resourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
gridBtn.Children.OfType()。其中(c=>
{
var TagPlusOne=转换为32(c.Tag)+1;
var PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
返回PaddedResult==s;
}).ToList().ForEach(c=>
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
});
返回true;
});
我想你也可以用Select代替Foreach
esourceList.Where(resourceOne =>
{
string s = (string)resourceOne;
var enumerable = ActiveForm.Controls.OfType<Button>().Where(control =>
{
var TagPlusOne = Convert.ToInt32(control.Tag) + 1;
var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
return PaddedResult == s;
}).Select(control =>
{
control.BackColor = Color.Aqua;
control.Cursor = Cursors.WaitCursor;
return control;
});
return true;
});
esourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
var enumerable=ActiveForm.Controls.OfType()。其中(control=>
{
var TagPlusOne=Convert.ToInt32(control.Tag)+1;
var PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
返回PaddedResult==s;
}).选择(控件=>
{
control.BackColor=Color.Aqua;
control.Cursor=Cursors.WaitCursor;
返回控制;
});
返回true;
});
您可以使用此代码。我为按钮和WinForm测试了这样的代码。
我希望代码对您有所帮助
resourceList.Where(resourceOne =>
{
string s = (string)resourceOne;
gridBtn.Children.OfType<ToggleButton>().Where(c =>
{
var TagPlusOne = Convert.ToInt32(c.Tag) + 1;
var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
return PaddedResult == s;
}).ToList().ForEach(c =>
{
c.BorderBrush = Brushes.Red;
c.BorderThickness = new Thickness(3, 3, 3, 3);
});
return true;
});
resourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
gridBtn.Children.OfType()。其中(c=>
{
var TagPlusOne=转换为32(c.Tag)+1;
var PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
返回PaddedResult==s;
}).ToList().ForEach(c=>
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
});
返回true;
});
我想你也可以用Select代替Foreach
esourceList.Where(resourceOne =>
{
string s = (string)resourceOne;
var enumerable = ActiveForm.Controls.OfType<Button>().Where(control =>
{
var TagPlusOne = Convert.ToInt32(control.Tag) + 1;
var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
return PaddedResult == s;
}).Select(control =>
{
control.BackColor = Color.Aqua;
control.Cursor = Cursors.WaitCursor;
return control;
});
return true;
});
esourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
var enumerable=ActiveForm.Controls.OfType()。其中(control=>
{
var TagPlusOne=C