为什么我的方法没有被我的通用对象识别?
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。
也许如果你能解释为什么你认为该方法可以在列表上调用,这可能会使它更清楚
我编写了一个具有接口和抽象的代码 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。
也许如果你能解释为什么你认为该方法可以在列表上调用,这可能会使它更清楚