从这个问题中了解到以下内容后,我想到了这一点:
where T : struct
我们,C# 开发人员,都知道 C# 的基础知识。我的意思是声明、条件、循环、运算符等。
我们中的一些人甚至掌握了诸如泛型、匿名类型、lambdas、LINQ之类的东西......
但是,即使是 C# 爱好者、爱好者、专家也几乎不知道的 C# 最隐藏的特性或技巧是什么?
以下是迄今为止揭示的功能:
关键词
yield
迈克尔·斯图姆var
迈克尔·斯图姆using()
科科斯的声明readonly
通过kokosas
迈克·斯通as
/埃德is
·斯旺伦as
/is
(改进)由Rocketpantsdefault
by死神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
enum
lfoust的价值观- @variablenames by marxidad
event
marxidad的运算符- Portman格式化字符串括号
- xanadont的属性访问器可访问性修饰符
- JasonS的条件(三元)运算符 (
?:
) checked
和unchecked
操作员Binoj Antonyimplicit and explicit
Flory的运算符
语言特点
- Brad Barker的可空类型
- Keith的匿名类型
__makeref __reftype __refvalue
犹大·希曼戈- lomaxx的对象初始化器
- 大卫在达科他州格式化字符串
- marxidad的扩展方法
partial
乔恩·埃里克森的方法- John Asbeck的预处理器指令
DEBUG
Robert 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的并行扩展