gpt4 book ai didi

c# - 无法访问自定义类堆栈实现中的类

转载 作者:行者123 更新时间:2023-11-30 17:30:25 26 4
gpt4 key购买 nike

我的类结构如下:

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

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters

关于c# - 无法访问自定义类堆栈实现中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49838437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com