.net 如何创建运算符>,〈,〈=,>=的枚举

brqmpdu1  于 2023-03-20  发布在  .NET
关注(0)|答案(3)|浏览(138)

我只想创建像这样的操作符枚举,但这会产生错误。

Public enum MyOperators {"<", "<=", ">",  ">="}

从SO上的建议,我尝试了这样的东西。

Public enum MyOperators {
  Less ='<', 
  LessOrEqual = '<=',
  Greater = '>', 
  GreaterOrEqual = '>='
}

现在它不喜欢LessorEqual和GreaterOrEqual中的“=”符号。
你可以在这里的C#操作符的MS参考中看到MS是如何处理它的。我也可以这样做,但我只是想看看是否有更好的建议。

编辑

如果您可以在不使用列表和switch语句的情况下执行此操作,那么您就可以回答我的问题

enum MyOperators {"<", "<=", ">",  ">="}

        string s  = Console.ReadLine();
        MyOperators op;

        if (Enum.TryParse(s, true, out op)) {
            //user entered operator 
        }
        else {
            //not operator
        }
n3h0vuf2

n3h0vuf21#

枚举值的类型通常为int。因此,您不能分配stringchar类型的对象。您可能会误解枚举的概念以及何时使用它。
正如Abion47所说:...枚举类型可以声明为从byteulong的任何本机整型以及介于两者之间的任何类型。[...]这不包括char。[...] char可隐式转换为int,因此您可以将整数枚举赋给字符文本。
你似乎在寻找一个常量列表。由于我不知道你想用你的“enum”做什么,试试这个,它可能会有帮助:

public static class MyOperators
{
    public const string Less = "<"; 
    public const string LessOrEqual = "<=";
    public const string Greater = ">";
    public const string GreaterOrEqual = ">=";
}
ffdz8vbo

ffdz8vbo2#

根据你的编辑,你可以很容易地提供一个列表的功能,所以我不知道为什么你不想要一个。

var operators = new List<string>() { "<", "<=", ">", ">=" };

string s  = Console.ReadLine();

if (operators.Contains(s))
{
    //user entered operator 
}
else
{
    //not operator
}

如果愿意,您甚至可以用列表替换数组。

bjp0bcyl

bjp0bcyl3#

刚刚在this answer中看到了如何使用EnumMember属性实现这一点,如果您主要关心的是反序列化JSON之类的内容:

public enum CardType
{
    [EnumMember(Value = "<")]
    LessThan,
    [EnumMember(Value = "<=")]
    LessThanEqualTo,
    [EnumMember(Value = ">")]
    GreaterThan,
    [EnumMember(Value = ">=")]
    GreaterThanEqualTo
}

相关问题