更新列表中的数据
Updating Data in List
我正在尝试使用用户提供的参数更新列表中的项目。我正在使用自定义列表类型 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());
}
ability
和scoreIncrease
都是用户提供的参数。在这里,我正在更新强度属性。我了解我在这里阅读的大部分内容:
但是我不明白w => w.Strength == "Strength"
到底在做什么。我将如何在我的代码中使用它?我真的是 C# 和列表的新手。任何帮助将不胜感激。
您根本不需要 Where
。当您想通过 Predicate
定义的条件过滤某些项目时使用它
在您的情况下,您想要更新所有对象的值 Strength
。
用一个ForEach
就够了
foreach(var s in abilityScores)
{
s.Strength = scoreIncrease.ToString()
}
w => w.Strength == "Strength"
比较列表中的每个项目,无论 属性 Strength
等于字符串 "Strength"
。其中函数使用 lambda 表达式作为标准,您希望 select 列表的哪一部分。
关于 lambda 表达式的更多信息:
https://weblogs.asp.net/dixin/understanding-csharp-features-5-lambda-expression
您可以尝试遍历 Where
:
指定的列表子集
foreach(var s in abilityScores.Where(w => w.Strength == ability))
s.Strength = scoreIncrease.ToString();
您正在使用 linq 语句。它与以下传统方式相同:
if (ability == "Strength")
{
foreach (var abilityScore in abilityScores)
{
if (abilityScore.Strength == "Strength")
{
abilityScore.Strength = scoreIncrease.ToString();
}
}
}
我正在尝试使用用户提供的参数更新列表中的项目。我正在使用自定义列表类型 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());
}
ability
和scoreIncrease
都是用户提供的参数。在这里,我正在更新强度属性。我了解我在这里阅读的大部分内容:
但是我不明白w => w.Strength == "Strength"
到底在做什么。我将如何在我的代码中使用它?我真的是 C# 和列表的新手。任何帮助将不胜感激。
您根本不需要 Where
。当您想通过 Predicate
在您的情况下,您想要更新所有对象的值 Strength
。
用一个ForEach
就够了
foreach(var s in abilityScores)
{
s.Strength = scoreIncrease.ToString()
}
w => w.Strength == "Strength"
比较列表中的每个项目,无论 属性 Strength
等于字符串 "Strength"
。其中函数使用 lambda 表达式作为标准,您希望 select 列表的哪一部分。
关于 lambda 表达式的更多信息: https://weblogs.asp.net/dixin/understanding-csharp-features-5-lambda-expression
您可以尝试遍历 Where
:
foreach(var s in abilityScores.Where(w => w.Strength == ability))
s.Strength = scoreIncrease.ToString();
您正在使用 linq 语句。它与以下传统方式相同:
if (ability == "Strength")
{
foreach (var abilityScore in abilityScores)
{
if (abilityScore.Strength == "Strength")
{
abilityScore.Strength = scoreIncrease.ToString();
}
}
}