C# 在指定的列表项位置更新列表元素
我正在尝试这样做:C# 在指定的列表项位置更新列表元素,c#,C#,我正在尝试这样做: foreach (Settings sets in MySets) { if (sets.pName == item.SubItems[2].Text) { var ss = new SettingsForm(sets); if (ss.ShowDialog() == DialogResult.OK)
foreach (Settings sets in MySets)
{
if (sets.pName == item.SubItems[2].Text)
{
var ss = new SettingsForm(sets);
if (ss.ShowDialog() == DialogResult.OK)
{
if (ss.ResultSave)
{
sets = ss.getSettings();
}
}
return;
}
}
但是由于集合派生的变量是只读的,我不能重写它
我也想做这样的事情
foreach (Settings sets in MySets)
{
if(sets.pName == someName)
sets.RemoveFromList();
}
我怎样才能做到这一点?列表有一个非常好的Add()方法,但它们忘记了其余的:(您不能在“常规”for循环中执行此操作?您可以使用:
MySets.RemoveAll(sets => sets.pName == someName);
删除满足特定条件的所有项目
如果要在不接触原始列表的情况下获取满足条件的所有项目,可以尝试:
List<Settings> selectedItems = MySets.FindAll(sets => sets.pName == someName);
谢谢。但是如何更新现有列表..类似于:更新设置x where x.name=“john”设置为y,设置为X在…的列表中course@SilentWarrior:如果
设置
是引用类型,则可以使用foreach
循环构造更改其成员。如果需要更改引用本身或它是值类型,则需要对循环使用索引的。更新了我的ans我们举个例子。难道没有更漂亮的方法吗?总之,thx为大家:)我想完全放弃for循环,而不是漂亮的
for (int i = 0; i < MySets.Count; ++i) {
var sets = MySets[i]; // simulate `foreach` current variable
// The rest of the code will be pretty much unchanged.
// Now, you can set `MySets[i]` to a new object if you wish so:
// MySets[i] = new Settings();
//
// If you need to remove the item from a list and need to continue processing
// the next item: (decrementing the index var is important here)
// MySets.RemoveAt(i--);
// continue;
if (sets.pName == item.SubItems[2].Text)
{
var ss = new SettingsForm(sets);
if (ss.ShowDialog() == DialogResult.OK)
{
if (ss.ResultSave)
{
// Assigning to `sets` is not useful. Directly modify the list:
MySets[i] = ss.getSettings();
}
}
return;
}
}