从基类属性

时间:2015-12-09 11:36:48

标签: c# arrays properties calculator base-class

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

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

            int indexOfLastOperatorBeforeSquare = leftOfSquare.LastIndexOfAny(operatorArray);

这是我的基类,包含Operator属性:

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

这是Addition Class的构造函数,例如:

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

1 个答案:

答案 0 :(得分:1)

您可能在OperationBaseAdditionSubstraction等课程中派生了Division ...

如果将这些实现存储在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);