簡體   English   中英

如何編寫強類型的lambda表達式?

[英]How to write strongly typed lambda expressions?

我想在一個內聯if語句中編寫一個lambda表達式。 但是內聯if語句必須具有強類型結果。

MyType obj = someObj.IsOk ? null : () => {
   MyType o = new MyType(intVal);
   o.PropertyName = false;
   return o;
};

當然這是行不通的,因為lambda表達式不是強類型的。 我想到了使用Func<intVal, MyType>委托使其成為強類型。

但是,如果Func<>內如何使用此Func<>呢? 是否有可能我必須在外部定義自己的函數並在if語句內聯中使用它?

這與lambda的輸入無關。 您試圖返回null或(不帶任何參數並返回MyType的函數),但您要告訴編譯器該語句的結果不是函數,而只是MyType。 我想你想做的是

MyType obj = someObj.IsOk ? null : new MyType(intVal);

即使使用更復雜的代碼,也可以使用對象初始化器表達式:

MyType obj = someObj.IsOk ? null : new MyType(intVal) { ProName = false };

如果確實要使用lambda,則可以編寫:

MyType obj = someObj.IsOk ? null : ((Func<MyType>) (() => {
   MyType o = new MyType(intVal);
   o.ProName = false;
   return o;
}))();

但是,坦率地說,這是一場括號和演員表的噩夢 您可以使用輔助方法使其更簡單:

public T Execute(Func<T> func)
{
    return func();
}

...

MyType obj = someObj.IsOk ? null : Execute(() => {
   MyType o = new MyType(intVal);
   o.ProName = false;
   return o;
});

如果你有這樣的事情...

  var obj = (someObj.IsOK) ? null : () => {
             return new MyType(intVal) { PropName =false }; }

您將收到錯誤信息...

“在null和lambda表達式之間沒有顯式轉換。”

其原因在本SO線程中進行了討論。

Mark可以正確處理您的代碼示例,但您可以像這樣設置屬性...

var obj = someObj.IsOk ? null : new MyType(intVal) { PropName = false };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM