在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