оновлення KeyValuePair, де ключ не є int

Я намагаюся внести зміни в KeyValuePair і придбати цей код від інший пост, який я знайшов :

var keysToModify = this.Properties
                    .Where(k => k.Key == propertyName)
                    .ToList();

                foreach (var key in keysToModify)
                {
                    this.Properties[key] = newValue;
                }

Але моє ключове поле - це рядок, а не int. Що мені потрібно зробити, щоб оновити KeyValuePair у цьому випадку?

EDIT: Мій KeyValuePair має рядок типу, рядок, і коли я запускаю код у моєму прикладі вище, я отримую помилку:

keyvaluepair не призначається для типу параметра int

1
Який тип Властивості з? Якщо це простий масив, то це проблема доступу до неї за допомогою рядка.
додано Автор Fischermaen, джерело
Ви можете зробити те ж саме, що і у знайденому вами питання. Ви можете використовувати значення рядка як ключ
додано Автор mao, джерело
Тип ключа тут не має значення.
додано Автор CodesInChaos, джерело
Але за допомогою цього коду ви можете просто зробити this.Properties [propertyName] = newValue
додано Автор CodesInChaos, джерело
Нічого особливого, або я пропустив щось?
додано Автор sll, джерело
Ви хочете знайти KeyValuePairs, які відповідають FullName клієнта замість ідентифікатора?
додано Автор Brian Dishaw, джерело

2 Відповіді

Немає особливої ​​магії для оновлення значення пари, коли ключ являє собою рядок - це майже так само, ви просто використовуєте рядок для доступу до значення (і це означає, що будь-який тип, який використовується як ключ, не містить будь-яких можливостей особливості)

Але єдине, що я можу думати, може бути кинути вас у цьому випадку це цикл. Цикл - це повторювані екземпляри, однак, при цьому не виявляється додатковий «індекс», а key у цьому випадку буде ланцюжком.

0
додано

Ключ не був цілим числом у пов'язаному вами питання, це був Customer . Ви повинні мати можливість використовувати той самий загальний метод незалежно від типу ключа. Ось приклад коду, як прийнята відповідь на інше питання, яке буде працювати, коли ключ - це рядок:

// The ToList() call here is important, so that we evaluate all of the query
// *before* we start modifying the dictionary
var keysToModify = CustomerOrderDictionary.Keys
                                          .Where(k => k == "MyString")
                                          .ToList();
foreach (var key in keysToModify)
{
    CustomerOrderDictionary[key] = 4;
}

Зауважте, що там, де інша відповідь отримала доступ до властивості Id клавіші Customer , ви можете безпосередньо порівняти ключ до цільової рядка.

Також зауважте, що якщо ви просто оновлюєте окремий запис у словнику, то вам не потрібна цикл, ви можете просто зробити це безпосередньо. Якщо ви знаєте, що словниковий словник містить запис із вказаною клавішею або не створює нову запис, просто використовуйте:

CustomerOrderDictionary ["MyString"] = 4;

або, щоб запобігти створенню нового запису:

if (CustomerOrderDicionary.ContainsKey("MyString"))
{
    CustomerOrderDictionary["MyString"] = 4;
}
0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug