如何制作字典扩展方法?

Jac*_*ack 15 c# extension-methods dictionary

我正在尝试编写一个Dictionary独立于Key/Value数据类型的扩展.我尝试使用object数据类型传递它,假设它适用于任何类型.

我的代码:

 public static class DictionaryExtensionsClass
    {
        public static void AddFormat(this Dictionary< ?? unknow type/*object*/, ??unknow type/*object*/> Dic, ??unknow type/*object*/ Key, string str, params object[] arglist)
        {
            Dic.Add(Key, String.Format(str, arglist));
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 33

您只需使该方法通用:

public static void AddFormat<TKey>(this Dictionary<TKey, string> dictionary,
    TKey key,
    string formatString,
    params object[] argList)
{
    dictionary.Add(key, string.Format(formatString, argList));
}
Run Code Online (Sandbox Code Playgroud)

请注意,它只是类型中的通用值,因为您将要为其添加字符串值,因此该值必须string(或者可能objectstring实现的接口,我猜).

遗憾的string是,在泛型类型约束中,您无法真正表达"仅允许值类型在哪里是有效值"的约束.

  • 如果您在不同的命名空间中工作,请确保使用`using`语句使扩展方法的类可见.尝试将您的扩展方法显式调用为`DictionaryExtensionsClass.AddFormat(theDictionary,key,format,...);`来检查可见性. (2认同)