我的类结构如下:
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。
最佳答案
您已经创建了一个自定义类 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));
}
}
另外,作为一种好的做法,不要将您的类(class)命名为 Stack
因为它是 C# 关键字。使用不同的名称。
引用资料:
https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-classes
关于c# - 无法访问自定义类堆栈实现中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49838437/