当前位置: 首页 > 编程语言 > C#

是否可以通过反射调用值类型运算符?分享

时间:2023-04-10 18:40:18 C#

是否可以通过反射调用值类型运算符?因为+、+=、==等C#运算符是可重写的。这让我觉得它们是一种方法,因此想知道是否有一种方法可以使用Int32上的反射来调用它们。这个怎么样,它简单,小而且有效:)publicTAdd(objectx,objecty){return(T)Convert.ChangeType((dynamic)x+(dynamic)y,typeof(T));你到底想做什么?处理运算符的各种含义(原始(映射到特定IL指令)、自定义(映射到静态方法)和提升(由编译器作为模式提供)使这很痛苦。如果您只想使用运算符,您可以编写通过泛型提供运算符支持的代码。我在MiscUtil(描述和示例)中免费提供了一些代码。作为一个无类型的示例(注意这不是很有效,但有效):objectx=123,y=345;//现在忘记我们知道这些是整数...)).Compile()();如果添加或比较需要方法调用的两个整数,效率非常低,因此这些对基本类型的简单操作是代码生成的,如另一个答案中所述,不能使用反射调用。一个有趣的内置值类型是decimal(或System.Decimal)。此结构在C#中支持文字值,但其行为与真实值类型非常相似,并公开了许多可通过反射调用的运算符。如果您好奇,可以使用Reflector浏览System.Int32公开的所有成员。这里有很好的答案,所以只需添加一些未提及的内容:结构可能会重载运算符。这意味着如果您尝试创建一些编程方法,有更多选项可以检查。尝试这个的一个好方法是尝试表达式树方法。这是一个小样本。当然,性能不是很好,但我们知道无论如何我们都在使用反射。以上是C#学习教程:是否可以通过反射调用值类型运算符?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: