Is it possible to create a new operator in c#?

C#.NetOperators

C# Problem Overview


I know you can overload an existing operator. I want to know if it is possible to create a new operator. Here's my scenario.

I want this:

var x = (y < z) ? y : z;

To be equivalent to this:

var x = y <? z;

In other words, I would like to create my own <? operator.

C# Solutions


Solution 1 - C#

No, it is not possible. You would need to create a method instead

Solution 2 - C#

No, but you can overload some existing operators in C#.

In some other languages, like F#, you can use:

let (<?) = min

Solution 3 - C#

As the other answers have said, you can't create a new operator - at least, not without altering the lexer and parser that are built into the compiler. Basically, the compiler is built to recognize that an individual character like < or ?, or a pair like >> or <=, is an operator and to treat it specially; it knows that i<5 is an expression rather than a variable name, for instance. Recognizing an operator as an operator is a separate process from deciding what the operator actually does, and is much more tightly integrated into the compiler - which is why you can customize the latter but not the former.

For languages which have an open-source compiler (such as GCC) you could, theoretically, modify the compiler to recognize a new operator. But it wouldn't be particularly easy, and besides, everyone would need your custom compiler to use your code.

Solution 4 - C#

I'm surprised no one mentioned "order of operations".

When the compiler evaluates an expression it has to be concerned with performing the operations in the correct order so that (1+2*3) = (2*3+1) multiplication always happens before addition at the same "level" in the expression.

When you override and operator, you can change what the operator does, but not the order in which the compiler will evaluate it. If you did created a new operator, there is no way to tell the compiler what order to evaluate it in relation to the others. So if you write x <? 2 + 5 Do you perform the x <? 2 first then add 5 or do you perform the addition first and then do x <? 7.

Solution 5 - C#

Not only can you not do that, but why would you want to?

I'm not sure what type your y and z are, but if they are of a numeric value type, you could probably use:

var x = Math.Min(y, z);

Though personally, I would still prefer:

var x = (y < z) ? y : z;

But I'm a bit of a ? : junky.

Good code is not just tight and efficient, but also readable. Even if you are the only one ever reading it, you'd come back to that <? operator one day and wonder what the heck that did.

Solution 6 - C#

No, but you can create Extension Methods instead of this

y.MethodName(z)

Solution 7 - C#

you can try to overload other operator like % or + to act as a <? operator.

Will be fun

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAaron PalmerView Question on Stackoverflow
Solution 1 - C#AgileJonView Answer on Stackoverflow
Solution 2 - C#DarioView Answer on Stackoverflow
Solution 3 - C#David ZView Answer on Stackoverflow
Solution 4 - C#JeffView Answer on Stackoverflow
Solution 5 - C#Paul HooperView Answer on Stackoverflow
Solution 6 - C#RonyView Answer on Stackoverflow
Solution 7 - C#Tiago PeczenyjView Answer on Stackoverflow