2012-04-15 72 views
0

我在C#中有一個Foo類,它有一個字符串名稱,我希望每個實例都有唯一的名稱。我想要做的是從創建一個靜態int變量中獲取名稱,然後將其分配給本地實例int變量,並將其添加到字符串的末尾。這不起作用,但我怎麼能得到我想要的結果。從一個靜態int分配一個對象的每個實例,以給出一個唯一的名稱C#

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

任何幫助,將不勝感激

謝謝

+0

你已經發布代碼,不編譯... – 2012-04-15 00:52:03

+0

@MitchWheat。 _「這不工作,雖然」_... – gdoron 2012-04-15 00:52:54

+0

「不起作用」並不意味着「它不會編譯」在我的書....按定義它不能工作,除非它編譯...但它可以'not work'編譯時也... – 2012-04-15 00:54:57

回答

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 
+0

所以我發現它爲什麼不增加。在我的代碼中,我有一個currentObject持有者,它只調用一次構造函數,然後每當它向List添加一些東西時,它只是執行一個不調用構造函數的淺表副本。它的原因是1025(在我的代碼中不是這個例子)是因爲我調用構造函數來首先初始化列表。爲了糾正這一切,我創建了一個增加靜態變量的函數。謝謝大家,如果你們沒有告訴我我是對的,我會一直認爲它不起作用。再次感謝所有! – 2012-04-15 04:41:53

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()在你的代碼更正確的地方。

0

嘗試收集你的FOOS變成泛型集合,如:

List<Foo> myFooList; 

然後你在更FOOS添加到您的列表,你可以使用索引編號來識別它。

1

米奇和都鐸有正確的例子,但我仍然會指出爲什麼您的代碼不起作用:

您的代碼不工作,因爲你在你的Foo構造,缺少括號這將導致代碼不能編譯。如果你忽略了這個編譯器錯誤,你可能正在運行一個以前的版本,它會產生你所看到的輸出。修復構造函數,您將看到您的代碼將按預期工作。

+0

+1。花時間解釋 – 2012-04-15 04:18:51

相關問題