从这个问题中了解到以下内容后,我想到了这一点:
where T : struct
我们,C# 开发人员,都知道 C# 的基础知识。我的意思是声明、条件、循环、运算符等。
我们中的一些人甚至掌握了诸如泛型、匿名类型、lambdas、LINQ之类的东西......
但是,即使是 C# 爱好者、爱好者、专家也几乎不知道的 C# 最隐藏的特性或技巧是什么?
以下是迄今为止揭示的功能:
关键词
yield迈克尔·斯图姆var迈克尔·斯图姆using()科科斯的声明readonly通过kokosas迈克·斯通as/埃德is·斯旺伦as/is(改进)由Rocketpantsdefaultby死神global::通过pzycomanusing()AlexCuse的积木volatile通过Jakub Šturcextern alias通过Jakub Šturc
属性
DefaultValueAttribute迈克尔·斯图姆ObsoleteAttribute通过丹尼蓝精灵DebuggerDisplayAttribute通过斯图DebuggerBrowsable并由bdukesDebuggerStepThrough_ThreadStaticAttribute由马西达FlagsAttribute通过马丁克拉克ConditionalAttribute通过安德鲁伯恩斯
句法
??kokos的 (coalesce nulls) 运算符- Nick Berardi的数字标记
where T:new由Lars Mæhlum- Keith的隐式泛型
- Keith的单参数 lambda
- 基思的汽车属性
- Keith的命名空间别名
- 带有@的逐字字符串文字,Patrick
enumlfoust的价值观- @variablenames by marxidad
eventmarxidad的运算符- Portman格式化字符串括号
- xanadont的属性访问器可访问性修饰符
- JasonS的条件(三元)运算符 (
?:) checked和unchecked操作员Binoj Antonyimplicit and explicitFlory的运算符
语言特点
- Brad Barker的可空类型
- Keith的匿名类型
__makeref __reftype __refvalue犹大·希曼戈- lomaxx的对象初始化器
- 大卫在达科他州格式化字符串
- marxidad的扩展方法
partial乔恩·埃里克森的方法- John Asbeck的预处理器指令
DEBUGRobert Durgin的预处理器指令- SefBkn的运算符重载
- 通过chakrit进行类型推断
- Rob Gough将布尔运算符提升到一个新的水平
- 将值类型变量作为接口传递而不由Roman Boiko装箱
- Roman Boiko以编程方式确定声明的变量类型
- Chris的静态构造函数
- 使用 LINQ 的roosteronacid更容易上手/浓缩的 ORM 映射
__arglist扎克保龄球
Visual Studio 功能
框架
TransactionScope通过KiwiBastardDependantTransaction通过KiwiBastardNullable<T>由IainMHMutex由迪亚哥System.IO.Path作者:ageektrappedWeakReference胡安·曼努埃尔
方法和属性
String.IsNullOrEmpty()KiwiBastard的方法List.ForEach()KiwiBastard的方法BeginInvoke(), Will DeanEndInvoke()的方法Nullable<T>.HasValue和RismoNullable<T>.Value的属性GetValueOrDefault约翰·希恩的方法
提示与技巧
- Andreas HR Nilsson的事件处理程序的好方法
- 约翰的大写比较
- 不通过dp反射访问匿名类型
- Will懒惰地实例化集合属性的快速方法
- roosteronacid的类似 JavaScript 的匿名内联函数
其他
- kokos 的网络模块
- Duncan Smart的LINQBridge
- Joel Coehoorn的并行扩展

