为什么我的方法没有被我的通用对象识别?

Why is my method not being recognized by my generic object?

我编写了一个具有接口和抽象的代码 class 以使我的主要功能与这两个对象一起使用。当我开始围绕我的函数工作时,一切都运行得很好,直到我需要从对象本身获取一个函数。 我的函数是:

void addNode<T>(List<T> genericList) where T : IGraphs{
                T genericNode = (T)Activator.CreateInstance(typeof(T));
                genericNode.Number = contDirected;
                
                if (genericList.Count > 0)
                {
                    string connectedNode = "";
                    while (!connectedNode.Equals("0") && genericList.RemainingNodesExist(undirectedGraphs, genericNode))
                    {
                  }      
                }
            }
        }

显然功能还没有完成,但问题是在我最后的“while”。当我尝试获取方法“RemainingNodesExist”时,IDE 给了我一个建议,说 List 没有该方法的定义。我不确定为什么会这样,因为我的 classes:

    public interface IGraphs
{
    public int Number { get; set; }

    public List<int> LinkedNumbers { get; set; }

}

public abstract class AbstractGraphs<T>
{
    public abstract bool RemainingNodesExist(List<T> list, T node);
}

在继承自上述那些的 classes 上:

public class DirectedGraph: AbstractGraphs<DirectedGraph>, IGraphs
{
    public int Number { get; set; }
    public List<int> LinkedNumbers { get; set; }

    public DirectedGraph()
    {
        Number = Number;
        LinkedNumbers = new List<int>();
    }

    public override bool RemainingNodesExist(List<DirectedGraph> list, DirectedGraph node)
    {
        int numbersConnected = node.LinkedNumbers.Count;
        if (numbersConnected != list.Count)
        {
            return true;
        }
        return false;
    }
    public UndirectedGraph()
    {
        Number = Number;
        LinkedNumbers = new List<int>();
    }

    public int Number { get; set; }
    public List<int> LinkedNumbers { get; set; }

    public override bool RemainingNodesExist(List<UndirectedGraph> list, UndirectedGraph node)
    {
        int numbersConnected = node.LinkedNumbers.Count;
        if (numbersConnected != list.Count)
        {
            return true;
        }
        return false;
    }

为了更好地总结我的目标... 我有 2 个在属性上完全相同的对象,但在某些情况下方法可能会有所不同。我使用通用 class T 是因为该程序将使用尚未定义的对象列表,这些对象可以是上述两个对象中的任何一个。我想让我的程序做的是运行“addNode”函数和运行两个对象基于它们的类型的方法。

有没有人遇到过类似的问题,或者可以给我一些解决方法的指导?

我对这个代码库非常怀疑,它看起来太复杂了。

但要回答你的具体问题

         while (!connectedNode.Equals("0") && genericList.RemainingNodesExist(undirectedGraphs, genericNode))

尝试调用 genericList 上的方法,即作为参数传递的 List<XXX>

该方法 (RemainingNodesExist) 在这里定义

public abstract class AbstractGraphs<T>
{
    public abstract bool RemainingNodesExist(List<T> list, T node);

}

它是 class 的一个方法 AbstractGraphs<T>

List<AnythinG>

无关

很难说您需要更改什么,因为这是一组令人费解的 classes。

也许如果你能解释为什么你认为该方法可以在列表上调用,这可能会使它更清楚