كيفية تعيين/إضافة العناصر (العناصر) إلى قاموس باستخدام فهرس المفتاح؟

StackOverflow https://stackoverflow.com/questions/3115885

سؤال

أردنا تعيين/إضافة عنصر إلى قاموس باستخدام فهرس المفتاح ، مثل هذا:

Dictionary<string, object> dict = new Dictionary<string, object>();
dict["key"] = dict["key"] ?? "object";

لكن ينتج عنه: "كان مفتاح معين غير موجود في القاموس."

هل هناك أي طريقة يمكننا تعيين قيم لهذا القاموس بنفس الطريقة التي أخصص بها القيم للجلسات ، باستخدام collesce null:

Session["Member"] = Session["Member"] ?? new Member();

شكرًا

تحرير: لقد حاولت بالفعل تجاوز الفهرس من فئة من القاموس للأطفال ، ولكن دون جدوى. قد يبدو تطبيق واجهة المعرف أكثر من اللازم لأننا نحتاج فقط إلى وظائف الكود أدناه (أي ، إرجاع NULL إذا لم يتم العثور على المفتاح). لذلك أعتقد ، ربما يمكننا استخدام ملحقات مثل:

public static TValue [this Dictionary<TKey, TValue> thisDictionary, TKey key] {
    get { return thisDictionary.ContainsKey(key) ? thisDictionary[key] : null; }
    set { thisDictionary[key] = value; }
}

لكنه لا يعمل أو حتى التجميع.

أي طرق أبسط أخرى حتى نتمكن من إعادة استخدام وظيفة الفهرس هذه؟ شكرًا جزيلاً.

هل كانت مفيدة؟

المحلول

إذا كنت تريد القيام بذلك مضمّنًا:

dict["key"] = dict.ContainsKey("key") ? (dict["key"] ?? "object") : "object"; 

بدلاً عن ذلك:

dict["key"] = dict.ContainsKey("key") && dict["key"] == null ? dict["key"] : "object";

تحرير حسب التعليقات:

public static TValue GetSafe(this Dictionary<TKey, TValue> thisDictionary, TKey key) 
{ 
   if (!thisDictionary.ContainsKey(key))
       thisDictionary[key] = null;

   return thisDictionary[key];
}

هذا يتيح لك القيام بذلك:

thisDictionary["randomKey"] = thisDictionary.GetSafe("randomKey") ?? "someValue";

نصائح أخرى

كما لاحظت ، فإن محاولة جلب مفتاح مفقود يلقي استثناء. يجب عليك التحقق مما إذا كان المفتاح موجودًا أولاً:

if( !Session.ContainsKey("Member") )
    Session["Member"] = new Member();

يحرر:

وللإجابة على سؤالك ؛ يمكنك إنشاء مفهرس خاص بك أو تنفيذ واجهة Idictionary. بهذه الطريقة يمكنك تجنب السلوك الافتراضي لإلقاء استثناء

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top