相关疑难解决方法(0)

为什么c#不能使用内联匿名lambdas或委托?

我希望我能恰当地提出问题的标题.

在c#中,我可以使用lambdas(作为委托),或者使用较旧的委托语法来执行此操作:

Func<string> fnHello = () => "hello";
Console.WriteLine(fnHello());

Func<string> fnHello2 = delegate()
{
    return "hello 2";
};
Console.WriteLine(fnHello2());
Run Code Online (Sandbox Code Playgroud)

那么为什么我不能"内联"lambda或委托体,并避免在命名变量中捕获它(使其匿名)?

// Inline anonymous lambda not allowed
Console.WriteLine(
    (() => "hello inline lambda")()
);

// Inline anonymous delegate not allowed
Console.WriteLine(
    (delegate() { return "hello inline delegate"; })()
);
Run Code Online (Sandbox Code Playgroud)

在javascript中工作的示例(仅用于比较)是:

alert(
    (function(){ return "hello inline anonymous function from javascript"; })()
);
Run Code Online (Sandbox Code Playgroud)

这会产生预期的警报框.

更新:看起来你可以在C#中使用内联匿名lambda,如果你适当地进行转换,但是()的数量开始让它变得难以驾驭.

// Inline anonymous lambda with appropriate cast IS allowed
Console.WriteLine(
    ((Func<string>)(() => "hello inline anonymous …
Run Code Online (Sandbox Code Playgroud)

c# lambda anonymous-methods inline-method

27
推荐指数
3
解决办法
2万
查看次数

c#lambdas只在编译时存在吗?

我是否正确地说lambda表达式只在编译时存在,一旦编译它们就变成了一个Expression(LambdaExpression?)或一个委托?

c# lambda

16
推荐指数
1
解决办法
225
查看次数

获取参数的调用变量名称

关于问题从调用方法获取参数名称查找传递给C#中函数的变量名称,我仍在寻找一种方法来定义WhatDoesTheAnimalSay_WANTED方法:我想知道用作变量的名称一个参数:

public class Farm
{
    public readonly string Cow = "Muuuuhh";

    public string Cat { get; set; }

    public void MainFunction()
    {
        var dog = "WauWau";
        var kiwi = new Bird("QueeeekQueeek");

        Cat = "Miiiaaauuuu";

        // This one works but looks kinda ugly and is cumbersome when used
        WhatDoesTheAnimalSay(nameof(dog), dog);
        WhatDoesTheAnimalSay(nameof(Cow), Cow);
        WhatDoesTheAnimalSay(nameof(Cat), Cat);
        WhatDoesTheAnimalSay(nameof(kiwi), kiwi);

        WhatDoesTheAnimalSay_WRONG1(dog);
        WhatDoesTheAnimalSay_WRONG2(dog);

        WhatDoesTheAnimalSay_WANTED(dog);
        WhatDoesTheAnimalSay_WANTED(Cow);
    }

    public void WhatDoesTheAnimalSay<T>(string name, T says)
    {
        MessageBox.Show("The " + name + " …
Run Code Online (Sandbox Code Playgroud)

.net c# ixmlserializable nameof

4
推荐指数
1
解决办法
1826
查看次数