是否有可能在C#中创build一个新的运算符?
我知道你可以超载现有的运营商。 我想知道是否有可能创build一个新的运营商。 这是我的场景。
我要这个:
var x = (y < z) ? y : z;
相当于这个:
var x = y <? z;
换句话说,我想创build自己的<?
运营商。
不,这是不可能的。 您需要改为创build一个方法
不,但是你可以在C#中重载一些现有的操作符 。
在其他一些语言中,比如F#,你可以使用:
let (<?) = min
正如其他答案所说,你不能创build一个新的操作符 – 至less,不能修改编译器内置的词法分析器和parsing器。 基本上,编译器是为了识别一个像<
或?
,或者像>>
或<=
这样的对,是一个操作符,并专门对待它; 它知道i<5
是一个expression式而不是variables名称,例如。 认识到操作员是操作员是决定操作员实际操作的一个独立过程,并且更紧密地集成到编译器中 – 这就是为什么您可以定制后者而不是前者。
对于具有开源编译器(例如GCC)的语言,理论上可以修改编译器来识别新的运算符。 但是这不会特别容易,而且每个人都需要自定义的编译器来使用你的代码。
你不但不能这样做,但你为什么要?
我不确定你的y和z是什么types,但是如果它们是数值types的,你可以使用:
var x = Math.Min(y, z);
虽然个人,我仍然更喜欢:
var x = (y < z) ? y : z;
但我有点儿? :垃圾。
好的代码不仅是紧密有效的,而且还可读。 即使你是唯一一个读过它的人,你也会回到那个<?
操作员有一天不知道做了什么。
不,但是你可以创build扩展方法而不是这个
y.MethodName(z)
您可以尝试重载其他运算符(如%
或+
以充当<?
运营商。
会很有趣