c# - 以编程方式获取转换和输出运算符类型

标签 c# reflection casting

在 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/

相关文章:

c# - 在方法调用之间缓存了哪些(如果有的话)本地定义的委托(delegate)?

javascript - TypeScript 接口(interface)向下转型

c# - 当结构是在 C# 中转换的泛型对象的协变类型时,结构无法转换为对象的任何解决方法?

c# - 在 .NET 中获取泛型类型的基本名称的正确方法是通过 Substring?

c# - 反射(reflection):框架行为与 GetRuntimeProperty 方法不一致

postgresql - 在 PostgreSQL 中将 bytea 表示为单个整数的最简单方法是什么?

c# - 如何使用ZedGraph绘制方波?

c# - C# 如何删除字符串中的最后一个字符?

C# RegEx 在管道分隔文件中查找空单元格

java - 如何获取对象中字段的名称?