'void'作为通用参数

时间:2011-01-19 23:17:56

标签: .net generics

我有一些常见的功能:

class MyBaseClass<TOut> 
{
    public abstract TOut MyFunc<TOut>();
}

和特定的实现

class MyDerivedClass : MyBaseClass<string> 
{
    public override string MyFunc<string>()
    {
        string strSomeThing;
        ... initialization of strSomeThing;
        return strSomeThing;
    }
}

和几个类似的派生类。

(对通用类型没有任何限制)。

今天,当我需要'MyFunc'来做一些操作时(比如说在DB中保存数据)并且不需要返回任何有意义的内容时,我就有了这种情况......

对于这种情况,我想将'void'作为类型参数......

我尝试这样做,编译器回答:

  

不能使用'void'作为类型参数。

您能告诉我,我案件的最佳解决方案是什么?

只需使用'Object'作为参数类型并在函数中返回null?

还有更好的东西吗?

非常感谢!

3 个答案:

答案 0 :(得分:1)

标准做法是为这种情况创建一个单独的非泛型类型。

编辑:例如:

class MyBaseClass
{
    public abstract void MyFunc();
}

根据您使用它们的方式,您可能希望让它们共享一个接口或基类。

答案 1 :(得分:0)

你可以输入一个“_void”来短整行或类似的东西,并将其用于可读性目的。 (并且只返回0)。

答案 2 :(得分:0)

这是一种巨大的气味。无论发生了什么,你都定义了一个泛型类,它有一个返回对象的方法,你希望从该类派生而不返回任何东西,这表明某些东西是非常错误的。这个方法很可能在各种重载中做了一些不同的事情(一些重载正在保存到数据库,一些重载正在向打印机发送一个作业,一些重载正在构建一个对象,或者其他什么),这是糟糕的设计。 / p>

请详细说明您的使用案例,但我的直觉是,重新设计是解决您问题的最佳方案(“Doc,当我这样做时会很痛。”“然后停止这样做。”)