람다 함수를 선언하고 즉시 호출 할 수 있습니다.
Func<int, int> lambda = (input) => { return 1; };
int output = lambda(0);
한 줄로 할 수 있는지 궁금합니다.
int output = (input) => { return 1; }(0);
컴파일러 오류 "방법 이름 예상"을 제공합니다. 전송 Func<int, int>이 작동하지 않습니다.
int output = (Func<int, int>)((input) => { return 1; })(0);
동일한 오류가 발생하며 아래에 언급 된 이유로 입력 인수 유형 (첫 번째 int) 을 명시 적으로 지정하지 않아도됩니다 .
예를 들어 코드를 직접 삽입하는 대신 왜 내가 이것을하고 싶은지 궁금 할 것입니다 int output = 1;. 이유는 다음과 같습니다.로 SOAP 웹 서비스에 대한 참조를 svcutil생성했습니다. 그래서 대신
var o = await client.GetOrderAsync(request);
return new Order {
OrderDate = o.OrderDate,
...
Shipments = o.Shipment_Order == null ? new Shipment[0]
o.Shipment_Order.Select(sh => new Shipment {
ShipmentID = sh.ShipmentID,
...
Address = CreateAddress(sh.ReceiverAddress_Shipment);
}).ToArray()
};
별도의 CreateAddress(GetOrderResultOrderShipment_OrderShipmentShipment_Address address)방법 (실제 이름은 더 길고 양식에 대한 제어가 매우 제한적입니다), 작성하고 싶습니다
var o = await client.GetOrderAsync(request);
return new Order {
OrderDate = o.OrderDate,
...
Shipments = o.Shipment_Order == null ? new Shipment[0]
o.Shipment_Order.Select(sh => new Shipment {
ShipmentID = sh.ShipmentID,
...
Address = sh.ReceiverAddress_Shipment == null ? null : () => {
var a = sh.ReceiverAddress_Shipment.Address;
return new Address {
Street = a.Street
...
};
}()
}).ToArray()
};
내가 쓸 수 있다는 것을 안다
Address = sh.ReceiverAddress_Shipment == null ? null : new Address {
Street = sh.ReceiverAddress_Shipment.Address.Street,
...
}
그러나 sh.ReceiverAddress_Shipment.Address필드가 많으면 그 부분 조차 매우 반복적입니다. 람다를 선언하고 즉시 호출하면 문자를 쓰는 것이 더 우아 합니다.
public T Exec<T>(Func<T> func) => return func();과 같이 사용하십시오 : int x = Exec(() => { return 1; });그것은 나에게 모든 파렌을 가진 캐스팅보다 훨씬 더 잘 읽습니다.
int output = ((Func<int>) (() => { return 1; }))();