泛型类:基于类型的条件方法

时间:2017-05-31 11:18:31

标签: c# generics

我有一个现有的C#泛型类,并希望根据使用的类型添加或删除方法,我解释

while (row_no < result.Tables[ind].Rows.Count)
{
    for (int i = 0; i < result.Tables[ind].Columns.Count; i++)
    {
        csvData += result.Tables[ind].Rows[row_no][i].ToString() + "|";
        string text = result.Tables[ind].Rows[row_no][i].ToString();
        csvData += text.Replace("\r\n", " ") + "|";
    }

    row_no++;
    csvData += "\n";
}

对于特定的public class MyType<T> { public T getValue() { return value; } } ,我希望“删除”“getValue”方法。 这样的事情是否存在?

2 个答案:

答案 0 :(得分:4)

不,但你可以用接口

完成类似的事情
interface IMyType
{
   //...what ever method/properties are shared for all
}

public class MyType<T> : IMyType
{
   public T getValue() { return value; }
   //...shared methods
}

public class MyTypeOtherSide : IMyType
{
   //...shared methods
}

然后你需要将变量声明为IMyType,并且当你知道它属于那种类型时才使用MyType<T>

答案 1 :(得分:0)

使用泛型的目的是拥有一个适用于所有类型的泛型类型声明,而不仅仅是几个类型。

我想你只想对数字进行操作。您可以在类中添加通用约束,如下所示:

public class MyType<T> where T: struct
{
    public T getValue() { return value; }
}

但是,这也允许具有通用参数void的类型具有GetValue - 方法,因为void也是struct。然而,这不会受到伤害,因为你不能像Lee所提到的那样构造一个类型MyType<void>

此外,没有所有数字类型实现的公共接口,并且可以用作通用约束。唯一的解决方法是为每种类型都有一个方法,所以GetDouble,GetInt等等