是否有可能在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) 

您可以尝试重载其他运算符(如%+以充当<? 运营商。

会很有趣