检查泛型类型的字段
public static int GetResult<TType>(TType aObject) {
if(aObject.mValue==12)
return 99;
return 20;
}
我如何检查 TType 的字段 mValue,我猜反射可能会出现这种情况,但我不确定如何检查?
谢谢。
public static int GetResult<TType>(TType aObject) {
if(aObject.mValue==12)
return 99;
return 20;
}
How can I check the field mValue of TType, I'm guessing reflection may come into this, but I'm unsure how?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当您想要保留强类型和编译时安全性时,泛型非常有用。如果您要诉诸反射,则无需使用泛型。因此,一种方法是定义包含此属性的接口或基类:
然后对该类型进行通用约束:
Generics are useful when you want to preserve strong typing and compile-time safety. If you are going to resort to Reflection no need to use generics. So one way would be to define an interface or a base class containing this property:
and then have a generic constraint on the type:
这是我使用的模式:
首先创建一个接口:
然后是一个实现该接口的“临时”类
现在,如果您有这样定义的类型,例如 Bar 和 Person:
那么您可以使用类似于以下的代码;
Here's a pattern that I use:
First create an interface:
Then an "adhoc" class that implements the interface
Now, if you have types, say, Bar and Person defined like this:
Then you can use code similar to the following;
您需要使用“where”关键字将 TType 限制为您知道具有 mValue 字段的类型或接口。
如果您不想这样做,可以使用dynamic关键字
例如,
但这应该是最后的手段,因为如果您的对象没有 mValue,它将在运行时失败。
You'd need to restrict TType using the 'where' keyword to a type or interface which you know has a mValue field.
If you don't want to do that, you can use the dynamic keyword
e.g.
But this should be a last resort as it will fail at runtime if your object doesn't have a mValue.