小编典典

静态通用类作为字典

c#

对于泛型参数的每种组合,泛型类中的静态字段将具有单独的值。因此,可以将其用作Dictionary

这是不是一个静态的字典更好或更坏<类型, 无论 >?

换句话说,这些实现中哪个更有效?

public static class MethodGen<TParam> {
    public static readonly Action<TParam> Method = CreateMethod();
    static Action<TParam> CreateMethod() { /*...*/ }
}

要么,

public static class MethodGen {
    static readonly Dictionary<Type, Delegate> methods 
              = new Dictionary<Type, Delegate>();

    public static Action<T> GetMethod<T>() {
        //In production code, this would ReaderWriterLock

        Delegate method;
        if(!methods.TryGetValue(typeof(T), out method)
            methods.Add(typeof(t), method = CreateMethod<T>());
        return method;
    }

    static Action<T> CreateMethod<T>() { /*...*/ }
}

特别是,CLR如何通过通用类型参数查找静态字段?


阅读 301

收藏
2020-05-19

共1个答案

小编典典

我喜欢以这种方式使用泛型类型。特别地,正是出于这个目的,我经常有私有嵌套的泛型类。

我喜欢它的主要问题是,它很难 得到正确初始化这种方式(在线程安全方面),给出的方法类型的初始化工作。唯一的问题是,如果初始化失败,该怎么办-
偶尔我会想起要引发第一个必要访问的异常,但这很少见。

我不想 确切 猜测CLR如何通过类型参数查找类型,但是我很确定它将进行优化以实现反复:)

2020-05-19