【问题标题】:Why is nothing being passed to my overloaded function? [closed]为什么没有任何东西传递给我的重载函数? [关闭]
【发布时间】:2019-12-12 05:26:18
【问题描述】:

这里是第一张海报。首先,我使用的是 .NET 4.8 和 C#。我在重载函数时遇到了一些问题,似乎没有得到任何参数输入。本质上,我的函数试图做的是获取单个对象或对象列表(所有自定义类“卡”),并确定其中一个对象是否与调用函数的对象具有相同的派别。但是,当我调试程序时,第一个函数按预期完美运行,但第二个函数似乎根本没有得到任何输入;它得到一个长度为 0 的对象。 'Factions' 是一个命名空间范围的公共枚举;我认为那里没有任何问题。

类和函数定义:

public class Card
{
    /* Constructors, variables, and other functions left out for simplicity */

    public bool SameFaction(Card card)
    {
        if (card.Faction.Equals(this.Faction))
            return true;
        return false;
    }

    public bool SameFaction(List<Card> hand)
    {
        foreach (Card card in hand)
        {
            if (card.Faction.Equals(this.Faction))
            {
                return true;
            }
        }
        return false;
    }
}

实施:

Card card1 = new Card(Factions.faction1);
List<Card> listOfCards = new List<Card>();
{
    new Card(Factions.faction1);
    new Card(Factions.faction2);
    new Card(Factions.faction3);
    new Card(Factions.faction4);
};

card1.SameFaction(new Card(Factions.faction1)); // Returns true
card1.SameFaction(listOfCards); // Returns false, and when debugging, shows input as being an object of length 0

基本上我想知道我做错了什么,以及是否有更好的方法来做到这一点。我是自学成才的,所以任何和所有建议都是有帮助的。谢谢!

【问题讨论】:

  • new List&lt;Card&gt;(); { - ; 可疑
  • 您基本上是在问,为什么 card.Faction.Equals(this.Faction) 会为您添加到列表中的每个 factionN 返回 false。与重载无关。您可以调试并检查问题所在。
  • @Mat 每个;new Card() 之后都是可疑的。
  • 让我怀疑集合初始值设定项的语法是否设计不当,因为一个放错位置的分号可以完全改变它的含义。对新手程序员来说有点陷阱!
  • @BradleySmith 好吧,在这种情况下,VS 将显示 "IDE0059 Unnecessary assignment of a value to 'listOfCards'" 消息,Idk 是否有帮助。

标签: c# .net function overloading


【解决方案1】:

问题是单个;太多

List<Card> listOfCards = new List<Card>();
{
    new Card(Factions.faction1);
    new Card(Factions.faction2);
    new Card(Factions.faction3);
    new Card(Factions.faction4);
};

这是两件事,不是一件,因为第一行以; 结尾。它创建一个空列表,然后有一段代码可以创建对象而不将它们放在任何地方。

这可能是你的意思:

List<Card> listOfCards = new List<Card>
{
    new Card(Factions.faction1),
    new Card(Factions.faction2),
    new Card(Factions.faction3),
    new Card(Factions.faction4)
};

【讨论】:

  • 是的,这就是答案。在 OP 中,它创建一个包含 0 个项目的新列表,然后在 { 中创建一堆新卡,而不将它们分配到任何地方。要进行测试,请单步执行您的调用函数并查看发送给该函数的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2015-06-26
相关资源
最近更新 更多