使用输入和输出传递lambda表达式

时间:2017-01-22 10:38:43

标签: c# lambda

我已经尝试了很久但似乎无法弄清楚解决方案。

一个函数,它接受一个字符串并返回一个IVehicle类型的对象。

方法签名

public class Car: IVehicle 
{
    public static IVehicle GetCar(Func<string, IVehicle> lambda)
    {
    //...
    }

方法调用

Car.GetCar("lambo" => new Car("lambo"));

问题:

我可以对我的调用进行哪些​​更改以与方法签名兼容?

定位.NET Framework 4.5.1

2 个答案:

答案 0 :(得分:4)

GetCar需要一个方法,它接受string并返回一个实现IVehicle的类型。

因此,您需要提供如下方法:

Car.GetCar(x => new Car(x));

这是一个更长的版本,没有lambda,来解释那里发生了什么:

Car.GetCar(CallThisMethod);

// See the signature of this method: it takes a string and returns IVehicle
public static IVehicle CallThisMethod(string someString)
{
    return new Car();
}

答案 1 :(得分:0)

正如@odingYoshi建议您需要更改它以便Func接收变量并使用该变量:

Car.GetCar(x => new Car(x));

如果您需要传递变量x,则可以在Func中对其进行硬编码:

Car.GetCar(x => new Car("lambo"));

但是,如果您需要这样做,您可能根本不应该使用Func

public static IVehicle GetCar(string carName)
{
    IVehicle car =  new Car(carName);

    //Anything extra
}

另一种方法是将字符串传递给方法:

public static IVehicle GetCar(Func<string, IVehicle> lambda, string carName)
{
    IVehicle car =  lambda(carName);

    //Anything extra
}