动作构造是通用的,但可以在其中支持通用类型吗?

下面显示的代码段是我要实现的目标。

我知道还有其他方法可以做到,但是我很好奇它是否可以在Action构造中实现。

void SomeMethod()
{
    Action<int> Initialize = //<T> and where T is all that stuff
    (index) =>
    {
        T obj = new T();
        obj.Initialize(index);
        obj.DoWork();
    };

    Initialize<TypeA>(1);
    Initialize<TypeB>(2);
}

最佳答案

不,基本上-或至少不在Action的单个实例内-就泛型而言,单个实例本质上是封闭的。显然,您可以使用常规的通用方法Initialize<T>。如果需要单个Action,则可能需要将类型作为参数:

Action<Type, int> init = (type, index) => {
    ISomeInterface obj = (ISomeInterface)Activator.CreateInstance(type);
    obj.Initialize();
    obj.DoWork();
};
init(typeof(TypeA), 1);
init(typeof(TypeB), 2);


除此以外:

void Initialize<T>(int index) where T : new(), ISomeInterface {
    T obj = new T();
    obj.Initialize();
    obj.DoWork();
}
void SomeMethod() {
    Initialize<TypeA>(1);
    Initialize<TypeB>(2);
}


您可以创建Action<int>代表以分别代表Initialize<TypeA>(int)Initialize<TypeB>(int),但不能同时代表两个代表,也不能同时代表打开的Initialize<T>(int)

关于c# - Action中的泛型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26672740/

10-16 16:27