"C#的隐藏特性?" [已关闭]

14 浏览
0 Comments

"C#的隐藏特性?" [已关闭]

输出内容缺失

admin 更改状态以发布 2023年5月22日
0
0 Comments

lambda表达式和类型推断被低估了。 Lambda可以包含多个语句,并且它们自动兼容委托对象(只需确保签名匹配),就像这样:

Console.CancelKeyPress +=
    (sender, e) => {
        Console.WriteLine("CTRL+C detected!\n");
        e.Cancel = true;
    };

请注意,我没有new CancellationEventHandler,也没有必要指定sendere的类型,它们可以从事件中推断出来。这就是为什么这种方式比编写整个delegate (blah blah)少费劲,而后者还需要您指定参数的类型。

Lambda不需要返回任何内容,而类型推断在这种情况下非常强大。

顺便说一下,您始终可以返回函数式编程意义上创建Lambda的Lambda。例如,这里是一个创建处理Button.Click事件的Lambda的Lambda的Lambda:

Func 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中使用指针之外,我认为这是您应该学习的另一个基本要素:-)

0
0 Comments

这不是C#本身的问题,但我还没有看到有人真正充分利用System.IO.Path.Combine()。实际上,整个Path类都非常有用,但没有人使用它!

我敢打赌每个生产应用程序都有以下代码,即使不应该:

string path = dir + "\\" + fileName;

0