为一个对象的每个实例分配一个静态int中的数字,以给出一个唯一的名称C#

时间:2012-04-15 00:46:38

标签: c# variables static instance counter

我在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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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()移到您代码中更正确的位置。

答案 3 :(得分:0)

尝试将您的食物收集到通用收藏中,例如:

List<Foo> myFooList;

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