2012-11-02 68 views
0

我有一個與我一起工作的對象,它放置在很多字典和列表中,所以當我調用它時,行會變得非常長,並且我希望能夠快速地使用它來做一些事情引用,就像這樣:如何在一個代碼範圍內引用具有長名稱的對象?

ref MyObject o = thingsStorageClass.dictionary[anotherDictionary[list.key]]; 
o.someField = value; 
int i = o.integer; 
DoStuff(o.specialSomething); 

但似乎我不能只把ref本地對象初始化之前。我如何做這樣的事情,而不使用我的對象作爲參數的外部方法?

+1

'ref'關鍵字用在方法參數中。它用於將_reference_傳遞給'value'類型,例如'int','char','byte'或'struct'等等。 –

回答

5

只是刪除ref,它會工作,因爲oMyObject類的一個實例,因此它是引用類型。你不會以這種方式創建新的實例。

+0

重要的部分是'o.someField = value'。它只是分配給一個副本,而不是真正的對象。 – user1306322

+0

不,你不是創建新的副本,你只是想獲得現有對象的引用(這是在你的字典等),這將工作,因爲'o'是類(引用類型)的實例。所以無論你做什麼「o」都會在字典中發生(因爲它是同一個對象)。 – Zbigniew

+0

您可以使用簡單的程序或/和調試器輕鬆驗證這一點。 – Zbigniew

2

只需放下ref - 無論如何你都在指定類型。

MyObject o = thingsStorageClass.dictionary[anotherDictionary[list.key]]; 
o.someField = value; 
int i = o.integer; 
DoStuff(o.specialSomething); 

或者使用var o =

3

如果您正在討論引用該對象,您只是想將它分配給一個variable(刪除ref關鍵字,這就是你所擁有的)。如果您使用C#3.0以上版本,則可以使用關鍵字var等關鍵字進一步縮短它。

var o = thingsStorageClass.dictionary[anotherDictionary[list.key]]; 

或者如果您是指實際類型本身,則可以使用別名,例如

using MyPair = System.Collections.Generic.Dictionary<string, string>; 
... 
var o = new MyPair("key", "value"); 
相關問題