我非常同意this post(对于那些对ToString的缺乏感到不满的人,有一个调试器属性为你的类提供自定义格式).
在上面的 list 上,我还要补充以下合理要求:
T : new(string)
,还是在哪里T : new(string, int)
Either<T>
"这样有效的闭合代数类型就不容易添加,所以我想用某种方式声明一个闭合代数类型并在其上强制进行穷举模式匹配(基本上对访问者模式的支持是一流的,但效率要高得多);所以只需获取枚举,用穷举模式匹配支持来扩展它们,并且不允许无效的 case ,System.IO
个类,比如Stream
,设计得有些糟糕;任何需要一些实现抛出NotSupportedException
的接口都是糟糕的设计,IList
应该比现在简单得多;事实上,这可能适用于许多具体的集合接口,比如ICollection
,INotifyPropertyChanged
)的字段名和成员名的方法,这些接口将字段名作为字符串;您可以通过使用接受带有MemberExpression
的lambda的扩展方法来实现这一点,即.() => Foo
,但是效率不是很高,
nameof()
运算符,但它在泛型中不起作用(nameof(T) == "T"
而不是实际类型参数的名称:您仍然需要做typeof(T).Name
)-它也不允许您获取"path"字符串,例如nameof(this.ComplexProperty.Value) == "Value"
限制其可能的应用程序.IArithmetic
;其他有用的共享运算符接口也是可能的.readonly
关键字,而C#6.0添加了只读自动属性,但它没有对不可变类型和值的真正语言支持那么严格.我想现在就够了.这些都是我过go 一周遇到的烦心事.如果我真的用心go 做,我可能会讲上几个小时.C#4.0已经添加了命名参数、可选参数和默认参数,我对此非常赞同.
现在针对一个不合理的要求:
漂亮吗?:-)