public static T Get<TKey, T>(this Dictionary<TKey, T> dics, TKey key, Func<T> fetch)
        {
            if (dics.ContainsKey(key))
            {
                return dics[key];
            }
            else
            {
                T value = fetch();
                dics[key] = value;
                return value;
            }
        }
这部分代码,不是很懂,特别是红色标注部分的参数不明白,希望可以列举参数的所表达的意思。谢谢!

解决方案 »

  1.   

    public static T Get<TKey, T>(this Dictionary<TKey, T> dics, TKey key, Func<T> fetch);
    TKey、T 这个你可以理解为占位符。
    到时候你调用Get<>()的时候就你给<>里传什么类型  TKey、T 就是什么类型
    比如:
    Get<int,string>()
    那你参数里的Tkey就是int类型而T就是string类型了
      

  2.   

    这涉及到一个概念:扩展方法。用this修饰的参数,使得你可以在C#中视作它的成员方法。比如:void foo(this string x, int y);
    那么如果有一个字符串变量,你可以这么调用 "hello world".foo(1);
    看上去foo像string的成员方法一样。
      

  3.   

    public static T Get<TKey, T>(this Dictionary<TKey, T> dics, TKey key, Func<T> fetch);
    TKey、T 这个你可以理解为不指定类型。也就是这里没给这个Dictionary或者是这个get方法赋值  当你调用的时候可以先给他置顶一个类型  然后就可以按照常规的调用方式去使用它  好处是 增加了代码的复用性!
      

  4.   

    还有个Func<T> fetch,你可能不懂,这个是指传递一个委托。这个委托的原型是 T fetch(),也就是没有参数,返回值是T类型的。
      

  5.   


      public static T Get<TKey, T>(this Dictionary<TKey, T> dics, TKey key, T defaultValue)
      {
      if (dics.ContainsKey(key))
      {
      return dics[key];
      }
      else
      {
        return defaultValue;
      }
      }这样不行吗?为什么要加个委托,求高人解释