【问题标题】:How to check if an implicit conversion is available between types?如何检查类型之间是否存在隐式转换?
【发布时间】:2013-08-15 10:30:27
【问题描述】:

我需要检查类型之间是否存在隐式转换。对于内置类型,我可以创建一个包含相应可用类型的类型和列表的字典。但是对于自定义类型,这是不可能的,因为我不知道将检查什么代码。有没有通用的方法来做到这一点?

谢谢。

【问题讨论】:

标签: c# casting implicit


【解决方案1】:

试试这个。如果为隐式对话的自定义类型定义方法,您将通过“op_Implicit”名称找到它

foreach (MethodInfo mi in typeof(CustomType).GetMethods())
        {
            if (mi.Name == "op_Implicit")
            {
                Console.WriteLine(mi.ReturnType.Name);
            }
        }

【讨论】:

  • 请注意,inbuilt 类型通常不包含运算符 - 它们的转换是在 IL 级别完成的。因此,虽然这是答案的部分,但某些转换通常需要硬编码
  • 这段带有内置类型定义的代码效果很好。非常感谢!
  • 谢谢。但是,有没有什么方法可以做到这一点而无需反思?
【解决方案2】:

你试过IsAssignableFrom吗?

Type type = typeof(MyClass);
type.IsAssignableFrom(typeof(MyOtherClass));

【讨论】:

  • 这似乎不适用于隐式转换。另请参阅此处的第一个答案:stackoverflow.com/questions/2119441/…
  • 错了! Long 可以从 Short 分配,long x = new short();,但 typeof(long).IsAssignableFrom(typeof(short)) 返回 False!
猜你喜欢
  • 2015-11-11
  • 2013-05-29
  • 1970-01-01
  • 2015-04-24
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多