协慌网

登录 贡献 社区

C#的隐藏功能?

在我从这个问题中了解到以下内容后,我想到了这一点

where T : struct

我们 C#开发人员都知道 C#的基础知识。我的意思是声明,条件,循环,运算符等。

我们中的一些人甚至掌握了Generics匿名类型lambdasLINQ等......

但是,即使 C#粉丝,瘾君子,专家几乎不知道 C#最隐藏的功能或技巧是什么?

以下是目前显示的功能:


Keywords

Attributes

Syntax

Language Features

Visual Studio Features

Framework

Methods and Properties

Tips & Tricks

  • Nice method for event handlers by Andreas H.R. Nilsson
  • Uppercase comparisons by John
  • Access anonymous types without reflection by dp
  • A quick way to lazily instantiate collection properties by Will
  • JavaScript-like anonymous inline-functions by roosteronacid

Other

答案

这不是 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也没有指定sendere类型,它们可以从事件中推断出来。这就是为什么编写整个delegate (blah blah)并不需要你指定参数类型的麻烦。

Lambdas 不需要返回任何东西 ,类型推断在这样的上下文中非常强大。

顺便说一下,你可以随时返回Lambdas,它们在函数式编程意义上使 Lambdas成为可能。例如,这是一个 lambda,它使 lambda 处理 Button.Click 事件:

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;