我对编程比较陌生,这就是我想做的事情: 我有一个包含属性"运算符"的基类,它的派生类是数学运算的类,所以运算符是' - ' ' +'现在我需要创建一个这些运算符的数组,以便在我的计算器引擎中使用。我只有一个操作方法列表,如何只提取操作符并将它们放在一个数组中?这就是我已经拥有的,但我要求使用现有的操作员
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 = "+";
}
答案 0 :(得分:1)
您可能在OperationBase
,Addition
,Substraction
等课程中派生了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);