C#的隐藏特性?
在我从这个问题中得知以下内容后,我想起了这件事:
where T : struct
我们,C#开发人员,都知道C#的基础知识。 我的意思是声明,条件,循环,操作符等。
我们中的一些人甚至掌握了泛型,匿名类型,lambda,LINQ等...
但是C#中最隐藏的特性或技巧是什么?甚至连C#粉丝,瘾君子,专家都不知道?
以下是迄今为止显示的功能:
关键词
yield
var
by Michael Stum using()
kokos的using()
语句 readonly
由kokos as
迈克斯通 as
/ is
由Ed Swangren as
/ is
(改善)由Rocketpants default
global::
由pzycoman using()
由AlexCuse块 volatile
extern alias
由JakubŠturc 属性
DefaultValueAttribute
ObsoleteAttribute
的属性 DebuggerDisplayAttribute
DebuggerBrowsable
和DebuggerStepThrough
by bdukes ThreadStaticAttribute
由marxidad提供 FlagsAttribute
由Martin Clarke完成 ConditionalAttribute
属性 句法
??
(coalesce nulls)运营商kokos where T:new
的LarsMæhlum enum
值由lfoust event
操作员 ?:
:) checked
和unchecked
操作员 implicit and explicit
操作符 语言功能
__makeref __reftype __refvalue
__refvalue partial
方法 DEBUG
预处理器指令 __arglist
by Zac Bowling Visual Studio功能
骨架
TransactionScope
DependantTransaction
交易 Nullable<T>
Mutex
System.IO.Path
通过ageektrapped WeakReference
by Juan Manuel 方法和属性
String.IsNullOrEmpty()
方法 List.ForEach()
方法 BeginInvoke()
, EndInvoke()
方法 Nullable<T>.HasValue
和Nullable<T>.Value
属性由Rismo GetValueOrDefault
方法 提示与技巧
其他
这不是C#本身,但我没有看到任何真正使用System.IO.Path.Combine()
的人。 实际上,整个Path类非常有用,但没有人使用它!
我敢打赌,每个生产应用程序都有以下代码,即使它不应该:
string path = dir + "" + fileName;
lambdas和类型推理被低估。 Lambdas可以有多个语句,并且它们自动加入兼容的委托对象 (只要确保签名匹配),如下所示:
Console.CancelKeyPress +=
(sender, e) => {
Console.WriteLine("CTRL+C detected!n");
e.Cancel = true;
};
请注意,我没有new CancellationEventHandler
也不需要指定sender
和e
类型,它们可以从事件中推导出来。 这就是为什么编写整个delegate (blah blah)
不那么麻烦,这也需要您指定参数类型。
Lambdas不需要返回任何东西 ,类型推断在这种情况下非常强大。
顺便说一下,你总是可以返回使Lambdas处于函数式编程意义上的Lambdas 。 例如,下面是一个使lambda处理Button.Click事件的lambda:
Func<int, int, EventHandler> makeHandler =
(dx, dy) => (sender, e) => {
var btn = (Button) sender;
btn.Top += dy;
btn.Left += dx;
};
btnUp.Click += makeHandler(0, -1);
btnDown.Click += makeHandler(0, 1);
btnLeft.Click += makeHandler(-1, 0);
btnRight.Click += makeHandler(1, 0);
注意链接: (dx, dy) => (sender, e) =>
这就是为什么我很高兴参加函数式编程课程:-)
除了C中的指针,我认为这是你应该学习的另一个基本的东西:-)
来自Rick Strahl:
你可以链接? 运算符,以便您可以执行一堆空比较。
string result = value1 ?? value2 ?? value3 ?? String.Empty;
链接地址: http://www.djcxy.com/p/1519.html