2013-02-22 37 views
0

我有以下類:如何在C#中使用get和set數組元素?

public class test 
{ 
    private int i; 
    public test(int in) 
    { 
     i = in; 
    } 
    public int testint; 
    { 
     get { return i; } 
     set { i = testint; } 
    } 
} 

和以下的代碼:

test[] data = new test[3]; 
for(int j = 0; j < 3; j++) 
{ 
    data[i] = new test(0); 
    data[i].testint = int.Parse(Console.ReadLine()); 
} 
Console.WriteLine(test[0].testint); 
Console.WriteLine(test[1].testint); 
Console.WriteLine(test[2].testint); 

當運行該程序,並輸入1,2,3作爲輸入,輸出爲0,0 ,0.我不明白爲什麼get或set似乎不起作用。如果我初始化的數組元素的值不是0,那麼輸出就是那個。數據[i] .testint = int.Parse(Console.ReadLine());似乎沒有工作。我會如何去做這樣的事情?

+0

'in'是c#關鍵字。 – 2013-02-22 17:40:15

+1

該setter看起來不正確。 – 2013-02-22 17:40:32

回答

3

您的設定器不正確。它應該是:

set { i = value; } 

您有:

set { i = testint; } 

其中僅觸發getter方法,從i得到,所以最後你的二傳手在做i = i

在setter中,value關鍵字包含該屬性的新候選值。 value的類型等於財產。我說候選人的價值,因爲你可以驗證它,並選擇不應用它。

就你而言,你並沒有應用該值。

更新

此外,定義getter和setter方法時,應使用沒有分號。代碼的話,應該是這樣的:

public int testint 
{ 
    get { return i; } 
    set { i = value; } 
} 
+0

這隻解決了我的答案中指出的語法錯誤之一。 – 2013-02-22 17:53:32

+0

@JonathanWood你是對的。雖然沒有必要downvote。答案已修復。 – 2013-02-22 19:09:55

+0

不管有沒有理由downvote,我沒有downvote你的答案。 – 2013-02-22 19:14:27

3

我看到這個代碼的兩個錯誤:

public int testint; 
{ 
    get { return i; } 
    set { i = testint; } 
} 

應該testint頂部後沒有分號。此外,set需要使用value分配,像這樣:

public int testint 
{ 
    get { return i; } 
    set { i = value; } 
} 
+0

允許我只是有點不同意。有**沒有** 2語法錯誤:有一個語法錯誤和一個語義錯誤。二傳手在語法上不是錯誤的。 – 2013-02-22 19:15:55

2

更改您的二傳手說:

set { i = value; } 

值對應送你去設置變量的值。

3

set方法改成這樣:

public int testint 
{ 
    get { return i; } 
    set { i = value; } 
} 
+0

所以,乾杯,歡呼聲。 – 2013-02-22 17:54:36

1

這是一個簡單的方法。

public int TestInt {get; set;}