طريقة التمديد لIDictionary <ر، ك>: الحجج نوع لطريقة لا يمكن الاستدلال على ذلك من استخدام

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

  •  06-07-2019
  •  | 
  •  

سؤال

في محاولة لتنظيف الكثير من التعليمات البرمجية المتكررة، حاولت تنفيذ طريقة تمديد أدناه:

    public static void AddIfNotPresent(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
    {
        if (!dictionary.ContainsKey(key))
        {
            dictionary.Add(key, value);
        }
    }

    public static void Test()
    {
        IDictionary<string, string> test = new Dictionary<string, string>();
        test.AddIfNotPresent("hi", "mom");
    }

والنتائج في خطأ مترجم أثناء المكالمة طريقة تمديد:

والحجج نوع لطريقة "Util.Test.AddIfNotPresent (هذا القاموس System.Collections.Generic.IDictionary، مفتاح TKey، قيمة TValue) 'لا يمكن الاستدلال على ذلك من الاستخدام. محاولة تحديد الحجج نوع صراحة.

وأي الضوء على هذا الموضوع سيكون محل تقدير كبير!

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

المحلول

وطريقة تمديد الخاص بك ليست عامة، ولكن ينبغي أن يكون، كما يجب تحديد طرق الإرشاد في فصول المستوى الأعلى غير العامة. وهنا نفس الرمز بعد لقد جعلت من طريقة عامة:

// Note the type parameters after the method name
public static void AddIfNotPresent<TKey, TValue>
    (this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
    if (!dictionary.ContainsKey(key))
    {
        dictionary.Add(key, value);
    }
}

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

نصائح أخرى

لا يمكن أن يتم ذلك ببساطة مع هذا؟

dictionary[key] = value;

ويضيف الزوج مفتاح / قيمة حالة عدم وجود المفتاح، أو بتحديث قيمة إذا لم. انظر Dictionary<TKey,TValue>.Item .

وجرب هذا:

public static void AddIfNotPresent<TKey, TValue>
       (this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)    
{       
    if (!dictionary.ContainsKey(key)) dictionary.Add(key, value);
}   

public static void Test()    
{        
     IDictionary<string, string> test = new Dictionary<string, string>(); 
     test.AddIfNotPresent("hi", "mom");    
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top