我的课程结构如下:
public abstract class LogicalTreeNode {
}
public class LogicalOperator:LogicalTreeNode {
public readonly string value;
public LogicalOperator(string value) {
this.value = value;
}
}
public class ConditionResult:LogicalTreeNode {
public readonly bool value;
public ConditionResult(bool value) {
this.value = value;
}
}`
我正在尝试使用Stack<LogicalTreeNode>
实现一些逻辑。我需要标准堆栈的方法和我自己的TryPush(LogicalTreeNode)
,这将是递归的(在某些情况下)。所以我这样做:
public class Stack<LogicalTreeNode> : Stack {
public void TryPush(LogicalTreeNode logicalTreeNode) {
/*Some logic */
this.TryPush(new ConditionResult(false));
}
}
我得到cannot convert ConditionResult to LogicalTreeNode
。我在做什么? TIA。
答案 0 :(得分:1)
您已为[{1}}创建了一个自定义类Stack
,其接受System.Collections.Stack
。
将您的代码更改为 -
Stack<LogicalTreeNode>
如果您特别希望在这种情况下仅使用某种类型(例如public class Stack<T> : Stack
{
public void TryPush(LogicalTreeNode logicalTreeNode)
{
/*Some logic */
this.TryPush(new ConditionResult(false));
}
}
)来实例化您的类,那么您必须这样做 -
LogicalTreeNode
如果您需要继承public class MyStack<T> where T : LogicalTreeNode
{
public void TryPush(LogicalTreeNode logicalTreeNode)
{
/*Some logic */
this.TryPush(new ConditionResult(false));
}
}
类并将类型限制为System.Collections.Stack
,那么请执行此操作 -
LogicalTreeNode
此外,作为一种良好做法,请不要将您的类命名为public class MyStack<T> : System.Collections.Stack : where T : LogicalTreeNode
{
public void TryPush(LogicalTreeNode logicalTreeNode)
{
/*Some logic */
this.TryPush(new ConditionResult(false));
}
}
,因为它是C#关键字。使用其他名称。
参考文献:
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-classes