泛型类接受原始类型和字符串

时间:2013-05-14 11:27:55

标签: c# generics collections

如何创建accepts only a type of Integer, Long and String.

的泛型类型

我知道我们可以限制单个类的类型,或者通过实现具有以下代码的接口

public class MyGenericClass<T> where T:Integer{ }

或处理int,long但不是字符串

public class MyGenericClass<T> where T:struct 

是否可以创建一个只接受Integer,Long和String类型的泛型?

2 个答案:

答案 0 :(得分:10)

您可能没有类声明中的约束,但在静态构造函数中进行一些类型检查:

public class MyGenericClass<T>
{
    static MyGenericClass() // called once for each type of T
    {
        if(typeof(T) != typeof(string) &&
           typeof(T) != typeof(int) &&
           typeof(T) != typeof(long))
            throw new Exception("Invalid Type Specified");
    } // eo ctor
} // eo class MyGenericClass<T>

编辑:

正如Matthew Watson所指出的,真正的答案是“你不能也不应该”。如果您的面试官认为 不正确,那么您可能不想在那里工作;)

答案 1 :(得分:2)

我建议您使用构造函数来显示可接受的值,然后将值存储在对象中。如下所示:

class MyClass
{
    Object value;

    public MyClass(int value)
    {
        this.value = value;
    }

    public MyClass(long value)
    {
        this.value = value;
    }

    public MyClass(string value)
    {
        this.value = value;
    }

    public override string ToString()
    {
        return value.ToString();
    }
}