我有以下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?)
知道如何测试回复的类型吗?
答案 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
的运算符