更新列表中的数据

时间:2018-09-19 09:10:27

标签: c# list custom-lists

我正在尝试使用用户提供的参数更新列表中的项目。我正在使用自定义列表类型AbilityScores。见下文:

class AbilityScores
{
    public string Strength { get; set; }
    public string Dexterity { get; set; }
    public string Constitution { get; set; }
    public string Intelligence { get; set; }
    public string Wisdom { get; set; }
    public string Charisma { get; set; }
}

我正在尝试将更新添加到列表的特定部分:

if(ability == "Strength"){
            abilityScores.Where(w => w.Strength == "Strength").ToList().ForEach(s => s.Strength = scoreIncrease.ToString());
}

abilityscoreIncrease都是用户提供的参数。在这里,我正在更新强度属性。我了解我在这里阅读的大部分内容:

  

c# Update item in list

但我不知道w => w.Strength == "Strength"的实际作用。我将如何在代码中使用它?我真的是C#和列表的新手。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

您根本不需要Where。当您要根据Predicate

定义的条件过滤某项时使用

对于您而言,您想为所有对象更新值Strength

使用ForEach就足够了

foreach(var s in abilityScores)
{
    s.Strength = scoreIncrease.ToString()
}

答案 1 :(得分:0)

w => w.Strength == "Strength"比较列表中的每个项目,而属性Strength等于字符串"Strength"。 where函数使用lambda表达式作为标准,要选择列表的哪一部分。

有关lambda表达式的更多信息: https://weblogs.asp.net/dixin/understanding-csharp-features-5-lambda-expression

答案 2 :(得分:0)

您可以尝试遍历Where指定的列表子集:

foreach(var s in abilityScores.Where(w => w.Strength == ability))
    s.Strength = scoreIncrease.ToString();

答案 3 :(得分:0)

您正在使用linq语句。它与以下传统方法相同:

if (ability == "Strength")
{
    foreach (var abilityScore in abilityScores)
    {
        if (abilityScore.Strength == "Strength")
        {
            abilityScore.Strength = scoreIncrease.ToString();
        }
    }
}