在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. 在实例声明中推导类
- 4. 非法实例声明/重叠实例
- 5. 无法在C#中的静态类中声明实例成员
- 6. 非法实例声明
- 7. 声明与实例化
- 8. 创建Haskell实例声明
- 9. RankNTypes为实例声明?
- 10. 在iOS中声明实例变量 - Objective-C
- 11. 如何在Objective C中声明类的实例?
- 12. 如何在Objective C中声明一个实例变量?
- 13. 为什么在接口中声明Objective-C实例变量?
- 14. 如何在C#中将类实例声明为常量?
- 15. 将IBOutlet放入实例变量声明或@property声明中?
- 16. 重构实例声明中的方法
- 17. Haskell:SDL绑定中的Bizzare实例声明
- 18. C++修改实例变量声明在父类
- 19. Objective-C中实例变量声明的顺序是否重要?
- 20. 在C#实现用VB声明
- 21. Windows Phone - 无法在C#中的静态类中声明实例成员
- 22. Kotlin类实例声明不正确
- 23. 红宝石:从声明OBJ实例
- 24. 差异如何声明实例变量
- 25. 显式实例声明与EXTERN
- 26. 属性和实例变量声明
- 27. 声明类实例及其初始化
- 28. 实例变量声明的放置
- 29. Haskell:显示的新实例声明
- 30. 用新的实例声明Angular服务
啊,太好了。 *请记住检查解决方案,由于某些原因,必须等待13分钟。* – joeriks 2010-09-26 08:40:55
@joeriks:“某种原因”是在那个时候可能会有更好的答案。当然,更好的答案可能会在以后出现,但它让所有人都有机会进入,而问题仍然比较新鲜。 – 2010-09-26 08:43:34
@joeriks,你是否以任何方式测试答案的证明?我并不怀疑乔恩的答案,但立即接受任何听起来不错的(精心制作的)答案都不会帮助任何人;)尤其是当答案完全错误时。所以要小心太快(没有冒犯性) – 2010-09-26 08:51:10