كيفية تعيين/إضافة العناصر (العناصر) إلى قاموس باستخدام فهرس المفتاح؟
-
29-09-2019 - |
سؤال
أردنا تعيين/إضافة عنصر إلى قاموس باستخدام فهرس المفتاح ، مثل هذا:
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. بهذه الطريقة يمكنك تجنب السلوك الافتراضي لإلقاء استثناء