如何检查类型之间是否存在隐式转换?

4
我需要检查类型之间是否存在隐式转换。对于内置类型,我可以创建一个字典,其中包含类型及其对应可用类型的列表。但是对于自定义类型,这是不可能的,因为我不知道将在哪个代码上进行检查。是否有通用方法来解决这个问题?
谢谢。

可能是重复的问题:如何检查是否存在隐式或显式转换? - nawfal
2个回答

11

试试这个。如果为自定义类型定义了隐式转换的方法,您可以通过 "op_Implicit" 名称找到它。

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

3
请注意,内置类型通常不包含运算符 - 它们的转换是在IL(Intermediate Language)级别完成的。因此,虽然这是答案的一部分,但某些转换通常需要硬编码。 - Marc Gravell
这个带有内置类型定义的代码非常好用。非常感谢! - Krzysztof Madej
谢谢。不过,有没有不使用反射的方法来实现这个? - krimog

-4

你尝试过使用 IsAssignableFrom 吗?

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

2
这似乎不适用于隐式转换。请参见此处的第一个答案:https://dev59.com/6nI95IYBdhLWcg3w2h56。 - Magnus Grindal Bakken
这是错误的!Long可以从Short赋值,long x = new short();,但是typeof(long).IsAssignableFrom(typeof(short))返回False! - Colonel Panic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接