在C#中聲明實例
回答
好,爲C#3你可以使用var
局部變量:
var x = new Dictionary<string, string>();
注意這個我與Python聲明非常不同:變量x
仍然是Dictionary<string, string>
類型;只是編譯器從作業的右側推斷了類型。所以你仍然可以獲得IntelliSense支持以及靜態類型的所有其他好處。 (如果你想動態輸入,你可以使用C#4以來的dynamic
,但這是一個非常不同的功能。)
此功能部分添加以支持匿名類型,儘管它在其他情況下也非常有用;最值得注意的是當你是調用一個構造函數。
有幾件事情要牢記:
- 它只適用於局部變量,而不是實例或靜態變量
- 您只能使用它,當你聲明,並在相同的分配聲明
編譯器必須能夠從作業中推斷具體類型;你不能寫
var x = null;
例如。
- 牢記可讀性。如果不是很明顯是被分配什麼樣的類型,可以考慮使用一個明確的聲明
- 如果以後要分配了一個不太確切的表達,你可能需要使用顯式類型
- 隱式類型有助於強調什麼代碼是這樣做的而不是它如何它是這樣做的;對於其中「how」特別重要的代碼位,考慮仍然使用顯式聲明
在C#3.0和更高版本中,您現在可以使用var聲明它們。
var obj = new Obj();
非常感謝,我責備在移動設備上打字;) – 2010-09-26 09:28:16
以下示例顯示了一些類型推論沒有雙重明確的類型規範(有時不存在)發生如下:
int[] array = { 1, 2, 3, 5, 6, 7, 8 };
var q = from x in array
let y = x.ToString()
select y;
foreach (var item in q)
{
Console.WriteLine(item.GetType());
}
1)陣列decalration的右手側單獨示出了數組初始化沒有類型說明。過去需要使用數組類型規範。
2)var q ....其中q從右側推斷。
3)從x ....這個範圍變量的類型是從數組的元素類型推斷的
4)讓y ...從右邊再次推斷範圍變量y的類型 5)foreach(var中的項目)...再次推斷的項目類型並未明確聲明
在規範中詳述的現代C#版本(例如lamba表達式)中有無數類型推斷的其他實例。所以不,你不必再指定兩次。事實上,目前很難看到這種明確的和潛在的冗餘規範的要求(例如,變量聲明)
- 1. C#類實例聲明
- 2. C中的隱式「聲明實例化」?
- 3. C++中的類:聲明實例
- 4. 客觀c類實例聲明錯誤?
- 5. 在實例聲明中推導類
- 6. 實例未在主函數中聲明
- 7. 非法實例聲明/重疊實例
- 8. 無法在C#中的靜態類中聲明實例成員
- 9. 聲明與實例化
- 10. 非法實例聲明
- 11. RankNTypes爲實例聲明?
- 12. 實例變量聲明
- 13. 聲明實例差異
- 14. 創建Haskell實例聲明
- 15. .h實例變量聲明
- 16. 函數或實例聲明?
- 17. 如何在類的實例中聲明類的實例?
- 18. 如何在C#中將類實例聲明爲常量?
- 19. 無法在C++ MFC中聲明實例變量
- 20. 在模板實例化中聲明extern C函數
- 21. 如何在Objective C中聲明一個實例變量?
- 22. 如何在C++中聲明一個類的靜態實例?
- 23. 爲什麼在接口中聲明Objective-C實例變量?
- 24. 在iOS中聲明實例變量 - Objective-C
- 25. 將IBOutlet放入實例變量聲明或@property聲明中?
- 26. Java中的實例字段聲明
- 27. Haskell:SDL綁定中的Bizzare實例聲明
- 28. 重構實例聲明中的方法
- 29. 在LINQ到實體的案例聲明
- 30. 朋友聲明,明確模板實例聲明
啊,太好了。 *請記住檢查解決方案,由於某些原因,必須等待13分鐘。* – joeriks 2010-09-26 08:40:55
@joeriks:「某種原因」是在那個時候可能會有更好的答案。當然,更好的答案可能會在以後出現,但它讓所有人都有機會進入,而問題仍然比較新鮮。 – 2010-09-26 08:43:34
@joeriks,你是否以任何方式測試答案的證明?我並不懷疑喬恩的答案,但立即接受任何聽起來不錯的(精心製作的)答案都不會幫助任何人;)尤其是當答案完全錯誤時。所以要小心太快(沒有冒犯性) – 2010-09-26 08:51:10