C# 检查类的类型
我有以下C#类课程:C# 检查类的类型,c#,C#,我有以下C#类课程: 知道如何测试回复类型吗?reply.GetType()是您要查找的回复类型。reply.GetType()是您要查找的回复类型您可以使用typeof这是一个返回对象的System.type的操作符 您可以使用typeof,这是一个返回对象的System.Type的操作符 嗯,typeof()只对类型有效(如typeof(int)),而不是变量,因此您需要 reply.GetType() 相反 但是您会发现case表达式需要文字值,因此需要转换为if-else块: pub
知道如何测试回复类型吗?
reply.GetType()
是您要查找的回复类型。reply.GetType()
是您要查找的回复类型您可以使用typeof
这是一个返回对象的System.type
的操作符
您可以使用
typeof
,这是一个返回对象的System.Type
的操作符
嗯,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.GetType()==typeof(Ok)){
//做点什么
}
否则{
//其他情况
}
}
或
if(回复正常){
//做点什么
}
否则{
//其他情况
}
嗯,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.GetType()==typeof(Ok)){
//做点什么
}
否则{
//其他情况
}
}
或
if(回复正常){
//做点什么
}
否则{
//其他情况
}
您也无法打开类型。您必须直接进行比较,或者可以执行类似于if(reply is Ok){//do something}
的操作。我还应该注意,在对象类型上执行开关/case
的情况实际上可能很好地表明,是时候添加一个可重写的方法来reply来执行该操作了。如果您可能需要其他对象类型,那么创建一个共享接口(Interface_CanDoSomethingByCase)。@Katana314我理解您关于重写的建议。。。但在这种情况下,Ok、BadRequest等是服务层中的类。我的评估方法是将这些服务层响应转换为HTTP响应,如500、404、200等。它们并不完全匹配,但我认为在服务层中具有HTTP功能不是一个好的选择,因为我希望它是HTTP不可知的。。。这就是为什么我在服务层使用者上使用这个Evaluate方法(或may扩展)将响应转换为HTTP响应的原因。@Miguel Fair。我从来都不知道如何在好的MVC设计和好的面向对象设计之间发生冲突时,正确地协调它们。你也不能切换类型。您必须直接进行比较,或者可以执行类似于if(reply is Ok){//do something}
的操作。我还应该注意,在对象类型上执行开关/case
的情况实际上可能很好地表明,是时候添加一个可重写的方法来reply来执行该操作了。如果您可能需要其他对象类型,那么创建一个共享接口(Interface_CanDoSomethingByCase)。@Katana314我理解您关于重写的建议。。。但在这种情况下,Ok、BadRequest等是服务层中的类。我的评估方法是将这些服务层响应转换为HTTP响应,如500、404、200等。它们并不完全匹配,但我认为在服务层中具有HTTP功能不是一个好的选择,因为我希望它是HTTP不可知的。。。这就是为什么我在服务层使用者上使用这个Evaluate方法(或may扩展)将响应转换为HTTP响应的原因。@Miguel Fair。我从来都不知道如何在好的MVC设计和好的面向对象设计之间发生冲突时正确地协调它们。OP使用的是typeof
——只是不正确地使用了它。我已经有一段时间没有编写C了,但这不是用来从类中获取系统的。Type
实例吗?ie,不是一个实例,而是类结构本身的名称(System.String
,vsmyStr
)我的错误!这里很早就错过了它。OP正在使用typeof
-只是使用不正确。我已经有一段时间没有编写C了,但这不是用来获取系统的。从类中键入实例吗?ie,不是一个实例,而是类结构本身的名称(System.String
,vsmyStr
)我的错误!很早就错过了。is和typeof有什么区别?我想第一种选择更快?也适用于子类,因此如果reply
是继承自Ok
的类的实例,则is
将返回true,而=
将不返回true。我怀疑在速度上是否有任何显著差异。我不知道是否为子类工作。我一直在使用typeof(foo)。IsAssignableFrom(typeof(bar))。回答得好!is或typeof之间有什么区别?我想第一种选择更快?也适用于子类,因此如果reply
是继承自Ok
的类的实例,则is
将返回true,而=
将不返回true。我怀疑在速度上是否有任何显著差异。我不知道是否为子类工作。我一直在使用typeof(foo)。IsAssignableFrom(typeof(bar))。回答得好!
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
}