c# - Action 中的通用类型?

标签 c#

Action 构造是通用的,但它可以支持其中的通用类型吗?

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

我知道还有其他方法可以做到这一点,但我很好奇是否可以在 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/

相关文章:

c# - Azure 认知服务(人脸检测 API)返回找不到资源

c# - 如何使文本框在 Windows 8 中只接受数字和一位小数

c# - 使用 MVVM 模式时,与属性更改相关的代码应该放在 setter 还是事件中?

c# - 客户端 C# 在 asp.net 中给出错误

javascript - 来自 javascript 的带有发布数据的新 Razor 页面

c# - 使用与 ConfuserEx 混淆的 C# DLL

c# - 如何在 SQL Parameter.AddWithValue 中设置 DEFAULT

c# - 是否可以将 await 与使用自定义函数的查询一起使用

c# - 有没有办法检查导航堆栈中是否存在页面

c# - 如何自定义日期格式