Обновление данных в списке - PullRequest
       30

Обновление данных в списке

0 голосов
/ 19 сентября 2018

Я пытаюсь обновить элементы в списке, используя предоставленные пользователем параметры.Я использую пользовательский тип списка 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 являются предоставленными пользователем параметрами.Здесь я обновляю атрибут силы.Я понимаю большинство из того, что я читаю здесь:

c # Обновление элемента в списке

Но я не понимаю, что на самом деле делает w => w.Strength == "Strength",Как бы я использовал это в моем коде?Я действительно плохо знаком с C # и списками.Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018

Вы используете оператор linq.Он делает то же, что и следующий традиционный способ:

if (ability == "Strength")
{
    foreach (var abilityScore in abilityScores)
    {
        if (abilityScore.Strength == "Strength")
        {
            abilityScore.Strength = scoreIncrease.ToString();
        }
    }
}
0 голосов
/ 19 сентября 2018

w => w.Strength == "Strength" сравнивает каждый элемент списка, независимо от того, является ли свойство Strength равным строке "Strength".Где функция использует лямбда-выражение для критериев, какую часть списка вы хотите выбрать.

Подробнее о лямбда-выражении: https://weblogs.asp.net/dixin/understanding-csharp-features-5-lambda-expression

0 голосов
/ 19 сентября 2018

Вы можете попробовать перебрать подмножество вашего списка, заданного Where:

foreach(var s in abilityScores.Where(w => w.Strength == ability))
    s.Strength = scoreIncrease.ToString();
0 голосов
/ 19 сентября 2018

Вам не нужно Where вообще.Он используется, когда вы хотите отфильтровать некоторый элемент по условию, определенному * Predicate 1003 *

В вашем случае вы хотите обновить значение Strength для всех объектов.

Использование ForEach достаточно

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