我只是处理字符串,我发现自己很恼火,字符串可以为空.所以,我必须拥有
if((teststring??string.Empty)==string.Empty)
到处都是.会串吗?在需要它的相对较少的情况下(dbs,白痴用户输入等)允许可空性是如此困难.在我想要某种形式的const正确性的情况下,我也发现自己不得不导出只读接口.那么,C#语言构建/决定会让你烦恼么?
编辑:感谢isnullorempty功能,我以前没见过!仍然不会减轻我可以为空的烦恼:D
测试Null或Empty的字符串最好使用:
if (string.IsNullOrEmpty(testString)) { }
使字符串成为引用类型对我来说似乎完全合理.
遗憾的是,人们不能将变量/参数/返回类型声明为不可为空 - 例如
// Never returns null public string! Foo() { }
我相信,.NET 4.0中的代码合同将有助于实现这一目标 - 但是要让它普及起来有点晚了.
前段时间我写了一篇关于C#错误的博客文章.总结一下这篇文章:
C#1:
缺少对属性的单独getter/setter访问.
缺乏泛型.从一开始,生活对于仿制药会更加甜美.
默认情况下,类没有被密封.
枚举刚被命名为数字.
"\ x"字符转义序列.
关于switch语句的各种事情:)
一些奇怪的重载决策规则
"lock"关键字,而不是"使用"锁定tocken.
C#2:
缺乏部分方法(来自C#3)
缺乏通用差异(来自C#4)
本System.Nullable
类(不Nullable
-这很好!)
InternalsVisibleTo要求强签名程序集的整个公钥而不是公钥标记.
C#3:
缺乏对不可变性的支持 - 许多变化改进了变异类型(自动属性,对象和集合初始化器)的机会,但这些都不适用于可变类型
扩展方法发现
对我来说,C#中最大的明显漏洞可能就是枚举.
Java枚举是可以提供行为的类型安全类,可以实现接口等.
C#/ .Net枚举只是美化的内容,所有问题都是常量已经回到C和C++.
out和ref参数