如何使用C#Generics比较类型?

raj*_*net 2 c# generics

我有一个程序,需要根据两个不相关的A和B类型做一些事情吗?我怎么能这样做?我无法从通用接口继承A和/或B.

 public class Proxy<T>
 {
        public T GetProxy()
     {
         if (typeof(T) is A)
             // Do something;
         else if (typeof(T) is B)
            // Do something else;                  
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在进行如下调用,但typeof(T)不等于A或B,而是等于System.RuntimeType.

var proxyA = Proxy<A>.GetProxy();
var proxyB = Proxy<B>.GetProxy();
Run Code Online (Sandbox Code Playgroud)

p.s*_*w.g 9

你可以测试这样的类型:

public class Proxy<T>
{
     public T GetProxy()
     {
         if (typeof(T) == typeof(A))
             // Do something;
         else if (typeof(T) == typeof(B))
            // Do something else;                  
    }
}
Run Code Online (Sandbox Code Playgroud)

或者可能是这样的:

public class Proxy<T>
{
     public T GetProxy()
     {
         if (typeof(A).IsAssignableFrom(typeof(T)))
             // Do something;
         else if (typeof(B).IsAssignableFrom(typeof(T)))
            // Do something else;                  
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,仿制药并不是真的应该以这种方式使用.如果你发现自己为两种完全不同的类型做了完全不同的事情,这可能不是泛型的最佳用法.