【问题标题】:Invalid token 'while' in class, struct, or interface member declaratio类、结构或接口成员声明中的标记“while”无效
【发布时间】:2014-06-22 00:58:39
【问题描述】:

我有以下代码

class Card
{
    string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}


class Program
{
    static void Main(string[] args)
    {
        int KaLP = 8000;
        int YuLP = 8000;
        Card bewd = new Card();
        Card LOD = new Card();
        var KaibaDeck = new List<Card>() { bewd, LOD };
        var KaibaHand = new List<Card>() { };
        var KaibaFusionDeck = new List<Card>() { };
        var KaibaGraveyard = new List<Card>() { };
        var YugiDeck = new List<Card>() {  };
        var YugiHand = new List<Card>() { };
        var YugiFusionDeck = new List<Card>() { };
        var YugiGraveyard = new List<Card>() { };

        int KaibaDeckSize = KaibaDeck.Count;
        string sDrawChoice;
        int DrawChoice;
        while (KaibaDeckSize > 0)
        {
            if (DrawChoice == 0)
            {
                break;
            }

            else
            {
                KaibaBattlePhase(KaibaHand, KaibaDeck, KaibaFusionDeck, YugiDeck, Field, KaibaGraveyard, YugiGraveyard, KaLP, YuLP, "Battle");
            }
        }
    }


    public static void KaibaBattlePhase(List<Card> KaibaHand, List<Card> KaibaDeck, List<Card> KaibaFusionDeck, List<Card> YugiDeck, List< List<Card> > Field, List<Card> KaibaGraveyard, List<Card> YugiGraveyard, int KaLP, int YuLP, const string Phase)
    {
        string sDecision;
        int Decision;

        while(true)//so the while loop NEVER breaks unless you have a 'break' later on
        {
            Console.WriteLine("Would you like to continue the Battle Phase? (Yes-'1'  No-'0', Check Kaiba's Graveyard '-1', Check YUGI's graveyard '-2')");
            sDecision = Console.ReadLine();
            int.TryParse(sDecision, out Decision);
            if (Decision==0)
            {
                break;
            }

            if (Decision==-1)
            {
                 KaibaGraveyardFunction(KaibaGraveyard);
            }
        }
    }

    public static void KaibaGraveyardFunction(List<Card> KaibaGraveyard)
    {
    Console.WriteLine("Kaiba's graveyard contains: ");
        foreach (Card KG in KaibaGraveyard)
        {
            Console.WriteLine(KG.Name);

        }
    }
}

我收到以下错误:
上线KaibaGraveyardFunction(KaibaGraveyard);

方法必须有返回类型

while(true):

类、结构或接口成员声明中的标记“while”无效

此外,我还遇到了很多其他错误,例如 “类、结构或接口成员声明中的标记 '('、'='、'.' 无效”

“语法错误,应为 ']'”

【问题讨论】:

    标签: c# oop object while-loop


    【解决方案1】:

    KaibaBattlePhase 的方法声明的末尾,您有这个方法参数:

    const string Phase
    

    这是一个语法错误,它会混淆编译器并导致它在之后几乎无法理解任何内容。 (我从未见过它与关键字混淆,这通常发生在缺少/多余的花括号等情况下。但我想这也会触发它。)

    您为什么要尝试将 constant 作为方法参数传递?这真的没有多大意义。如果该方法认为它是一个常量,它不会接受任何值。如果你给它传递一个常量,该方法就不会知道或关心值的来源。

    如果您删除 const,那么其余的错误就会消失。

    (旁注:如果您清理该方法声明,该错误会变得很多更容易查看。10 个参数很多。您很可能会得到在那里进行一些重构以使其更清洁。最简单的方法是,您可以将所有这些参数替换为具有这些属性的参数 DTO 对象。可能更有用的是Replace Method With Method Object 模式,如here 所示。 )

    【讨论】:

      【解决方案2】:

      没有完全遵循你的逻辑,也不确定这是你的问题,但你永远不会重新评估 KaibaDeckSize。如果您的意图是简单地使用while (KaibaDeckSize &gt; 0) {} 评估作为进入块的条件,请考虑将其替换为简单的if 语句:if (KaibaDeckSize &gt; 0) {} 此外,您永远不会初始化DrawChoice,这将产生Use of unassigned local variable 错误在编译期间。使用:int DrawChoice = 0; 而且这个 DrawCount` 也永远不会重新分配。

      您是否真的发布了您最近的代码?

      int KaibaDeckSize = KaibaDeck.Count;
      string sDrawChoice;
      int DrawChoice = 0;
      while (KaibaDeckSize > 0)
      {
          if (DrawChoice == 0)
          {
              break;
          }
          else
          {
              KaibaBattlePhase(KaibaHand, KaibaDeck, 
                  KaibaFusionDeck, YugiDeck, Field,
                  KaibaGraveyard, YugiGraveyard, KaLP, YuLP, "Battle");
          }
      
          KaibaDeckSize = KaibaDeck.Count;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-07
        • 2016-07-10
        • 1970-01-01
        • 2012-06-19
        • 2014-02-02
        相关资源
        最近更新 更多