C#通过Lambda

时间:2016-09-11 14:58:01

标签: c# lambda

我想使用lambda表达式将对象发送到参数。

如果我有这样的设置类:

public class Settings() {
    public string Name {get;set;}
    public string Whatever {get;set;}
}

其他一些方法,其参数是一个Settings类:

public object GenerateIt(Settings settings) {
    // stuff here
}

我想这样称呼它:

myObject.GenerateIt(
    s => {
        s.Name = "this";
        s.Whatever = "whatever";
    }
)

我已经尝试了这个,但它并没有完全解决这个问题:

public object GenerateIt(Func<Settings> settings) { ... }

我也在尝试(根据当前的答案)使用动作:

public object GenerateIt(Action<Settings> settings) { ... }

...这允许我(显然)以我喜欢的方式调用该方法,但我似乎无法找到如何访问我传入的那些设置?

public object GenerateIt(Action<Settings> settings) {

    Console.WriteLine(settings.Name);   // nope

    var s = settings(); // nope

    ??? 
}

(是的,我确实参考了文件 - 如果之后我很清楚,我不会再问了)

允许传递对象的正确机制是什么,如“我想这样称呼它”示例中所示?感谢

2 个答案:

答案 0 :(得分:4)

阅读文档。

Func<T> 返回一个T并且不带任何参数。你想要Action<T>

答案 1 :(得分:1)

public object GenerateIt(Action<Settings> settings) { ... }

详细了解Action,Func,Predictate: Delegates: Predicate Action Func

更新:不确定您要归档的内容,但请尝试此操作。

enter image description here