检查班级的类型

时间:2015-05-15 13:37:19

标签: c#

我有以下C#类:

public class Reply<T> { }

public class Ok<T> : Reply<T> { }

public class BadRequest<T> : Reply<T> { }

在接收回复的方法上,我需要检查它的类型是Ok还是BadRequest或者......类似的东西:

public static String Evaluate(Reply<T> reply) {

  switch (typeof(reply)) {
    case typeof(Ok<T>):
      // Do something
      break;
    // Other cases
  }

}

但是我收到了错误

 The type or namespace name 'reply' could not be found (are you missing a using directive or an assembly reference?)

知道如何测试回复的类型吗?

3 个答案:

答案 0 :(得分:4)

好吧,typeof()仅适用于类型(如typeof(int)),而非变量,因此您需要

reply.GetType() 

代替。

但是,您发现case表达式需要文字值,因此您需要转换为if-else块:

public static String Evaluate<T>(Reply<T> reply) {
    if(reply.GetType() == typeof(Ok<T>)) {
        // Do something
    }
    else {
     // Other cases  
    }
}  

  if(reply is Ok<T>) {
      // Do something
  }
  else {
      // Other cases
  }  

答案 1 :(得分:2)

reply.GetType()是您正在寻找的

答案 2 :(得分:-1)

您可以使用typeof这是一个返回对象System.Type的运算符

https://msdn.microsoft.com/en-us/library/58918ffs.aspx