C#中的语言决定会让你烦恼吗?

Ste*_*eve 7 c#

我只是处理字符串,我发现自己很恼火,字符串可以为空.所以,我必须拥有

if((teststring??string.Empty)==string.Empty)
Run Code Online (Sandbox Code Playgroud)

到处都是.会串吗?在需要它的相对较少的情况下(dbs,白痴用户输入等)允许可空性是如此困难.在我想要某种形式的const正确性的情况下,我也发现自己不得不导出只读接口.那么,C#语言构建/决定会让你烦恼么?

编辑:感谢isnullorempty功能,我以前没见过!仍然不会减轻我可以为空的烦恼:D

Mit*_*eat 28

测试Null或Empty的字符串最好使用:

if (string.IsNullOrEmpty(testString))
{
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 21

使字符串成为引用类型对我来说似乎完全合理.

遗憾的是,人们不能将变量/参数/返回类型声明为不可为空 - 例如

// Never returns null
public string! Foo()
{
}
Run Code Online (Sandbox Code Playgroud)

我相信,.NET 4.0中的代码合同将有助于实现这一目标 - 但是要让它普及起来有点晚了.

前段时间我写了一篇关于C#错误的博客文章.总结一下这篇文章:

C#1:

  • 缺少对属性的单独getter/setter访问.
  • 缺乏泛型.从一开始,生活对于仿制药会更加甜美.
  • 默认情况下,类没有被密封.
  • 枚举刚被命名为数字.
  • "\ x"字符转义序列.
  • 关于switch语句的各种事情:)
  • 一些奇怪的重载决策规则
  • "lock"关键字,而不是"使用"锁定tocken.

C#2:

  • 缺乏部分方法(来自C#3)
  • 缺乏通用差异(来自C#4)
  • System.Nullable类(不Nullable<T>-这很好!)
  • InternalsVisibleTo要求强签名程序集的整个公钥而不是公钥标记.

C#3:

  • 缺乏对不可变性的支持 - 许多变化改进了变异类型(自动属性,对象和集合初始化器)的机会,但这些都不适用于可变类型
  • 扩展方法发现

  • 稍后添加泛型的问题是它会影响类lirbary*now*.没有非泛型集合,框架会更加清晰.在没有IEnumerable的情况下实现IEnumerable <T>也不错...... (3认同)

cle*_*tus 7

对我来说,C#中最大的明显漏洞可能就是枚举.

Java枚举是可以提供行为的类型安全类,可以实现接口等.

C#/ .Net枚举只是美化的内容,所有问题都是常量已经回到C和C++.


Mic*_*nov 5

out和ref参数

  • 返回一个复合对象. (4认同)