在 C# 中,给定两个输入 Type
,是否可以确定运算符的输出 Type
和隐式向上转换 Type
?例如,考虑表达式 s + i
。假设我有以下信息:
short s;
int i;
Type leftType = typeof(short);
Type rightType = typeof(int);
我可以确定有关表达式 s + i
的以下信息吗?
Type leftUpcastType = typeof(int);
Type rightUpcastType = typeof(int);
Type outputType = typeof(int);
显然,我可以使用所有类型和运算符的巨大查找表来完成此操作,但可能有更简单的方法。理想情况下,这也适用于具有运算符重载的用户定义类,但这是次要要求。
最佳答案
是的,您可以使用 dynamic
类型实现此目的。不过请记住,对于任何无法在运行时 求和的内容,动态都会抛出异常,因此您需要确保只传递有效值或包装在 try/catch 中。
var leftType = left.GetType();
var rightType = right.GetType();
var outputType = ((dynamic)left + (dynamic)right).GetType();
然后您可以从该信息中推断出一个对象、两个对象还是两个对象都没有为该操作进行转换。
关于c# - 以编程方式获取转换和输出运算符类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30200440/