在我从这个问题中学到以下知识后,这个想法浮现在我的脑海中:
where T : struct
我们这些C#开发者都知道C#的基础,比如声明、条件语句、循环、运算符等等。
有些人甚至掌握了泛型, 匿名类型, Lambda表达式, LINQ等高级用法。
但是C#还有哪些隐藏的特性或技巧,即使是C#的粉丝、狂热者、专家也很少知道呢?
以下是目前已经揭示出来的特性:
关键词
yield
由 Michael Stum 创建var
由 Michael Stum 创建using()
语句由 kokos 创建readonly
由 kokos 创建as
由 Mike Stone 创建as
/is
由 Ed Swangren 创建as
/is
(改进版) 由 Rocketpants 创建default
由 deathofrats 创建global::
由 pzycoman 创建using()
块由 AlexCuse 创建volatile
由 Jakub Šturc 创建extern alias
由 Jakub Šturc 创建
属性
- 由Michael Stum创建的
DefaultValueAttribute
- 由DannySmurf创建的
ObsoleteAttribute
- 由Stu创建的
DebuggerDisplayAttribute
DebuggerBrowsable
和DebuggerStepThrough
由bdukes创建- 由marxidad创建的
ThreadStaticAttribute
- 由Martin Clarke创建的
FlagsAttribute
- 由AndrewBurns创建的
ConditionalAttribute
语法
??
(合并空值) 操作符由 kokos 实现- 数字标记由 Nick Berardi 实现
where T:new
由 Lars Mæhlum 实现- 隐式泛型由 Keith 实现
- 单参数 lambda 表达式由 Keith 实现
- 自动属性由 Keith 实现
- 命名空间别名由 Keith 实现
- 使用 @ 的逐字字符串字面量由 Patrick 实现
enum
值由 lfoust 实现- @variablenames 由 marxidad 实现
event
操作符由 marxidad 实现- 格式化字符串括号由 Portman 实现
- 属性访问器可访问性修饰符由 xanadont 实现
- 条件 (三元) 操作符 (
?:
) 由 JasonS 实现 checked
和unchecked
操作符由 Binoj Antony 实现implicit
和explicit
操作符由 Flory 实现
语言特性
- 可空类型 by Brad Barker
- 匿名类型 by Keith
__makeref __reftype __refvalue
by Judah Himango- 对象初始化器 by lomaxx
- 格式化字符串 by David in Dakota
- 扩展方法 by marxidad
partial
方法 by Jon Erickson- 预处理器指令 by John Asbeck
DEBUG
预处理器指令 by Robert Durgin- 运算符重载 by SefBkn
- 类型推断 by chakrit
- 布尔运算符taken to next level by Rob Gough
- 无需装箱即可将值类型变量传递为接口 by Roman Boiko
- 以编程方式确定声明的变量类型 by Roman Boiko
- 静态构造函数 by Chris
- 使用 LINQ 更易于阅读/压缩的 ORM 映射 by roosteronacid
__arglist
by Zac Bowling
Visual Studio 特性
- 通过 Himadri 在编辑器中选择文本块
- 通过 DannySmurf 使用代码片段
框架
TransactionScope
由 KiwiBastard 提供DependantTransaction
由 KiwiBastard 提供Nullable<T>
由 IainMH 提供Mutex
由 Diago 提供System.IO.Path
由 ageektrapped 提供WeakReference
由 Juan Manuel 提供
方法和属性
String.IsNullOrEmpty()
方法由KiwiBastard提供List.ForEach()
方法由KiwiBastard提供BeginInvoke()
、EndInvoke()
方法由Will Dean提供Nullable<T>.HasValue
和Nullable<T>.Value
属性由Rismo提供GetValueOrDefault
方法由John Sheehan提供
提示与技巧
- 通过Andreas H.R. Nilsson提供的良好方法处理事件处理程序
- John提供的大写字母比较
- 无需反射即可访问匿名类型,由dp提供
- Will提供的快速懒惰实例化集合属性的方法
- roosteronacid提供的类似JavaScript的匿名内联函数
其他
- kokos提供的netmodules
- Duncan Smart提供的LINQBridge
- Joel Coehoorn提供的Parallel Extensions
"a".Equals("A", StringComparison.OrdinalIgnoreCase)
。 - SLaks