从基数 class 属性 获取字符数组

Get array of chars from a base class property

我对编程比较陌生,这是我想做的事情: 我有一个包含 属性 "Operator" 的基数 class,它的导数是 classes 用于数学运算,所以运算符是 '-' '+' 等。现在我需要创建这些运算符的数组以在我的计算器引擎中使用。我只有一个操作方法列表,如何只提取操作符并将它们放入数组中?这是我已经拥有的,但我被要求使用已经存在的 Operators

char[] operatorArray = {'+', '-', '/', '*'};

            int indexOfLastOperatorBeforeSquare = leftOfSquare.LastIndexOfAny(operatorArray);

这是我的基础 Class 包含运算符 属性:

public abstract class OperationBase
{
    public abstract string Operator { get; set; }
    public abstract string Execute(string leftOperator, string rightOperator);
}

以加法Class的构造函数为例:

public Addition()
    {
        Operator = "+";
    }

可能您在 类 中导出了 OperationBase,例如 AdditionSubstractionDivision...

如果将这些实现存储在 List<OperationBase> 中(即向整个列表添加实例:list.Add(new Addition()); list.Add(new Subtraction()); 等等),则可以使用 LINQ 提取运算符:

List<OperationBase> operations = new List<OperationBase>();
operations.Add(new Addition());
operations.Add(new Division());
operations.Add(new Subtraction());

IEnumerable<char> operators = operations.Select(operation => operation.Operator[0]);

现在,整个 operators 可以转换为数组调用 operators.ToArray(),它将包含运算符作为字符:

char[] operatorChars = operators.ToArray();

请注意,我必须使用 operation.Operator[0] 获取运算符字符:您的 OperationBase 定义操作将其运算符提供为 string 而不是 char。如果要避免这种情况,将整个属性固定,转为char类型,代码如下:

IEnumerable<char> operators = operations.Select(operation => operation.Operator);