检测类型TA是否可以在运行时强制转换为TB?(考虑的不仅仅是继承)所以我知道这是可行的:Assert.That(!typeof(B).IsAssignableFrom(typeof(A)));但是,假设这两种类型是Int32和Int64。在运行时,我可以将Int32值转换为Int64变量,但反过来不行。如何在运行时检查这种类型的转换兼容性?(IsAssignableFrom在这里不起作用,它总是为Int32和Int64给出false)编辑:我不能简单地尝试转换,因为我没有这些类型的任何值,我问假设有两种类型A和B,没有两个值a和b。对于非原始类型,您可以反映并检查是否有支持转换的类型上的op_Implicit方法。IL实际上并不支持真正的运算符重载,因此它纯粹是C#用于识别运算符重载的通用系统。如果它是从C#中的运算符重载定义创建的,则该方法也将被标记为IsSpecialName。对于基本类型(例如Int32和Int64),最简单的选择是对各种情况进行硬编码,因为转换是通过原始IL操作码而不是通过方法进行的。但是,原始类型只有少数几种,因此创建一种方法来检查每种原始类型的所有可能性并不困难。一方面请注意,由于您的示例特别提到原始值类型,请注意隐含的“转换”(在C#中)的存在并不意味着所有“转换”都将起作用。C#转换操作(T)x也可以表示“将x中的值解压为类型T”。如果x包含装箱的Int32而您尝试(Int64)x,那么这将在运行时失败,即使您可以隐式地将Int32转换为Int64。有关为什么拆箱有效的详细信息,请参阅EricLippert。一种(不太优雅)的方法是简单地尝试一下——将您的尝试包装在try/catch中,如果异常被捕获则返回Assertfalse。以上是C#学习教程:检查TA类型是否可以在运行时强制转换为TB?(不仅考虑继承)所有分享的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
