在第73播客中,乔尔·斯波斯基(Joel Spolsky)和杰夫·阿特伍德(Jeff Atwood)讨论了“每个人都应该讨厌自己喜欢的编程语言的五件事”:
如果您对当前的工具链感到满意,则无需切换。但是,如果您不能列出您最不喜欢的编程语言的五件事,那么我认为您还不了解它。最好知道这些替代方法,并且对所使用的任何方法都保持批判的眼光。
很好奇,我问了我面试的任何候选人这个问题。他们中没有人能够引用他们至少讨厌C#¹的一件事。
为什么?这个问题有什么困难?正是由于面试压力大,被访者无法回答这个问题?
这个问题有什么问题使面试不好吗?
显然,这并不意味着C#是完美的。我自己列出了我不喜欢C#的五件事:
泛型中缺乏可变数量的类型(类似于
params
参数)。
Action<T>
,
Action<T1, T2>
,
Action<T1, T2, T3>
,
⁞ 严重?
Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>
缺少对度量单位的支持,例如在F#中。
缺少只读属性。
private readonly
每当我想要只读属性时,都会写一个后备字段。缺少具有默认值的属性。是的,我知道我可以在无参数构造函数中对其进行初始化,并从所有其他构造函数中调用它。但是我不想。
多重继承。是的,它会引起混乱,在大多数情况下您不需要它。它在某些(非常罕见)的情况下仍然有用,并且混淆也适用于该类(该类在C#中已解决),该类继承了多个包含相同名称的方法的接口。
我敢肯定,这个清单还远远不够完整,还有很多要强调的地方,尤其是比我的要好得多的地方。
¹一些人批评.NET Framework中的某些程序集,或者该框架中缺少某些库,或者批评CLR。这不算什么,因为问题是关于语言本身的,尽管我可能会接受有关.NET Framework核心否定性问题的答案(例如,诸如以下事实这样的事实:没有通用接口TryParse
,所以如果您想将字符串解析为几种类型,则必须对每种类型重复一次),关于JSON或WCF的答案完全是题外话。
Why the question “give five things you hate about C#” is so difficult to answer
因为这是一个清单问题,并且在您有机会回答之前,一个邪恶的mod会将其关闭为“非建设性的” ...; P