5

我如何创建一个泛型类型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 类型的泛型?

4

2 回答 2

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 上面指出的那样,真正的答案是“你不能也不应该”。如果您的面试官认为是不正确的,那么您可能无论如何都不想在那里工作;)

于 2013-05-14T11:32:48.800 回答
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();
    }
}
于 2013-05-14T11:47:59.937 回答