我已经尝试了很久但似乎无法弄清楚解决方案。
一个函数,它接受一个字符串并返回一个IVehicle
类型的对象。
方法签名
public class Car: IVehicle
{
public static IVehicle GetCar(Func<string, IVehicle> lambda)
{
//...
}
方法调用
Car.GetCar("lambo" => new Car("lambo"));
问题:
我可以对我的调用进行哪些更改以与方法签名兼容?
定位.NET Framework 4.5.1
答案 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
}