anahtarın int olmadığı bir KeyValuePair güncellenmesi

Ben bir KeyValuePair için bir değişiklik yapmaya çalışıyorum ve bu kod kadar var bulduğum başka bir gönderi :

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

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

Ama benim anahtar alanım bir int değil. Bu durumda bir KeyValuePair'i güncellemek için ne yapmam gerekir?

DÜZENLEME: Benim KeyValuePair yazı dizgisi, dize ve yukarıdaki örnekte kodu çalıştırdığımda, hatayı alıyorum:

keyvaluepair, int type parametresine atanamaz

1
Hangi tür Özellikler ? Basit bir dizi ise, o zaman bir dizeyle erişen bir sorun var .
katma yazar Fischermaen, kaynak
Bulduğunuz sorudakiyle aynı şeyi yapabilirsiniz. Dize değerini bir anahtar olarak kullanabilirsiniz.
katma yazar mao, kaynak
Anahtarın türü burada hiçbir fark yaratmaz.
katma yazar CodesInChaos, kaynak
Ancak bu kodla bunu yapabilirsiniz. [Özellikler] [özellik_adı] = newDeğeri
katma yazar CodesInChaos, kaynak
Özel bir şey yok mu, bir şey mi özledim?
katma yazar sll, kaynak
Anahtarın yerine Müşterinin TamAdı ile eşleşen KeyValuePairs'i mi arıyorsunuz?
katma yazar Brian Dishaw, kaynak

2 cevap

Anahtarın bir dize olduğu zaman çiftin değerini güncellemek için belirli bir sihir yoktur - aynıdır, sadece bir değere erişmek için bir dize kullanıyorsunuz (ve bu, anahtar olarak kullanılan herhangi bir tür anlamına gelir, herhangi bir şekilde ihmal edilir) özelikleri).

Ama düşünebildiğim tek şey bu durumda seni alaşağı edebilir. Döngü, yinelemeli örneklerdir ve bunu yaparken bir "endeks" göstermez, bunun yerine anahtar yapar bir dizgidir.

0
katma

Anahtar, bağlı sorunuzda bir tam sayı değildi, Müşteri idi. Anahtar tipi ne olursa olsun aynı genel metodu kullanabilmeniz gerekir. Burada, anahtarın bir dize olduğu zaman çalışacak olan diğer soruya verilen cevap gibi örnek kod:

// 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;
}

Diğer yanıtın Müşteri anahtarının Id özelliğine eriştiğinde, anahtarı doğrudan hedef dizgeyle karşılaştırabileceğinizi unutmayın.

Ayrıca, eğer sözlükte tek bir girişi güncellediyseniz, bir döngüye ihtiyaç duymazsanız, bunu doğrudan yapabilirsiniz. Sözlük sözlüğünün verilen anahtarla bir girişi olduğunu biliyorsanız veya yeni bir giriş oluşturmayla ilgili bir sorun yoksa, yalnızca şunu kullanın:

CustomerOrderDictionary ["MyString"] = 4;

veya yeni giriş oluşturmaya karşı korunmak için:

if (CustomerOrderDicionary.ContainsKey("MyString"))
{
    CustomerOrderDictionary["MyString"] = 4;
}
0
katma