0

我在 C# 中有一个 Foo 类,它有一个字符串名称,我希望每个类都有一个唯一的名称。我想要做的是通过创建一个静态 int 变量来获取名称,然后将其分配给我添加到字符串末尾的本地实例 int 变量。但这不起作用,我怎么能得到我想要的结果。

class Foo
{
    static int count = 0;
    int fooNum;
    string name;

    public Foo
    {
        ++count;
        fooNum = count;
        name = "Foo" + fooNum;
        Console.WriteLine(name);
    }
}

int main()
{
   for(int i = 0; i < 5; i++)
   {
      Foo test = new Foo();
   }
}

实际输出:Foo5 Foo5 Foo5 Foo5 Foo5

期望的输出:Foo0 Foo1 Foo2 Foo3 Foo4

任何帮助将不胜感激

谢谢

4

4 回答 4

2

您的代码无法编译。将其更正为:

class Foo
{
    static int count = 0;
    int fooNum;
    string name;

    public Foo()
    {
        ++count;
        fooNum = count;
        name = "Foo" + fooNum;
        Console.WriteLine(name);
    }
}

static void Main(string[] args)
{
    for (int i = 0; i < 5; i++)
    {
        Foo test = new Foo();
    }
}

使它像魅力一样编译和工作。它打印

Foo1
Foo2
Foo3
Foo4
Foo5
于 2012-04-15T00:53:14.047 回答
1

Mitch 和 Tudor 有正确的例子,但我仍然会指出为什么你的代码不起作用:

您的代码不起作用,因为您的Foo构造函数中缺少括号,这会导致代码无法编译。如果您忽略此编译器错误,您可能正在运行以前的构建,它会产生您所看到的输出。修复构造函数,您将看到您的代码将按预期工作。

于 2012-04-15T01:52:40.977 回答
0

此代码按预期工作:

namespace ConsoleApplication68
{
    class Program
    {
        static void Main(string[] args)
        {
           for (int i = 0; i < 5; i++) 
           { 
              Foo test = new Foo();
              Console.WriteLine(test.name); 
           } 
        }
    }

    class Foo 
    { 
        private static int count = 0; 
        public string name; 

        public Foo() 
        { 
            int fooNum = ++count; 
            name = "Foo" + fooNum; 
        } 
    } 
}

请注意,我已将 移至Console.WriteLine()代码中更正确的位置。

于 2012-04-15T00:53:53.393 回答
0

尝试将您的 Foos 收集到一个通用集合中,例如:

List<Foo> myFooList;

然后,当您将更多 Foos 添加到列表中时,您可以使用索引号来识别它。

于 2012-04-15T00:54:09.500 回答