【问题标题】:Can you do shorter declarations in C#?你能在 C# 中做更短的声明吗?
【发布时间】:2013-05-23 23:07:03
【问题描述】:

我总是写很长的声明,比如:

private Dictionary<IPAddress, IWebSocketConnection> Dict = new Dictionary<IPAddress, IWebSocketConnection>();

有没有办法这样写:

private Dict = new Dictionary<IPAddress, IWebSocketConnection>();

【问题讨论】:

  • 这是不可能的 - 你必须通过创建一个 var 来做到这一点,或者,如果你要重复使用具有完全相同类型参数的字典,你可以创建一个自定义类并使用类型参数扩展字典。
  • 可能值得注意的是,如果您的目标定位早于 .net 3.5,var 不可用
  • @retailcoder var 是编译器的功能,而不是运行时的功能。因此,如果您的编译器支持 C# 3.0 或更高版本,无论您的目标是什么框架,它都应该可以工作。

标签: c# .net variables coding-style declaration


【解决方案1】:

对于局部变量,你可以这样做:

var Dict = new Dictionary<IPAddress, IWebSocketConnection>();

但不适用于类字段。

【讨论】:

  • 没有。 var 在编译时被评估以获取分配给它的第一个值的类型。没有性能影响,Intellisense 也能够解决它。
  • 使用var 在某些情况下会影响可读性。写var dog = new Dog() 完全没问题,但是写var temp = SomeMethod() 这样的东西很难确定temp 应该是什么。
  • 您的最后一句话既是推测性的,也是不准确的。我提醒你Java没有统一的类型系统,无符号整数运算,十进制类型,用户定义的结构类型,可为空值类型,不安全指针,部分类,匿名类型,第一类属性,用户定义的运算符,索引器和转换、对象和集合初始化器、显式接口实现、引用/输出参数、可选参数、命名参数、收益返回、扩展方法、条件方法、部分方法、正确具体化的泛型类型...
  • ... 泛型类型的构造函数约束、匿名方法、lambda、同形表达式树、查询理解、动态语言互操作、类型推断的局部变量、检查算术、逐字字符串、多维数组、条件编译、区域指令、固定大小的缓冲区和显式堆栈分配。如果 Java 正在“大量复制”C# 的所有伟大特性,那么他们的工作就非常糟糕。你愿意修改你的陈述吗?
【解决方案2】:

或者你也可以创建一个新类:)

Dictionary&lt;IPAddress, IWebSocketConnection&gt;创建一个子类

public class Dict : Dictionary<IPAddress, IWebSocketConnection> {
  //...
}

然后这样使用:

var dict = new Dict();

【讨论】:

  • 不会投反对票,但我认为“较短的声明”不值得继承......
【解决方案3】:

你可以使用别名:

using ShortName = Lib.SubFolder.ClassVeryLongName.SubClassEvenLongerName;

这必须放在文件/命名空间的顶部,就像常规的 *using*s。

然后使用它。

编辑:

像这样使用它:

using Dict = System.Collections.Generic.Dictionary<System.Net.IPAddress, YourNamespcae.IWebSocketConnection>;

注意:您需要将完整的类名指定为 System.Net.IPAddress
我不知道 IWebSocketConnection 是什么,但您只需在开头添加命名空间。

然后像这样使用它:

字典 dict1 = new Dict();

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多