我正在嘗試構建一個采用lambda 運算式params串列(即逗號分隔串列)的方法。
public void DoSomething<TDataType, ...>(params Expression<Func<TDataType, TNavProp>>[] properties)
{
// ...
}
如何TNavProp以允許多種不同型別的方式宣告?
例如...
public class Class1
{
public int IntProp { get; set;}
public string StringProp { get; set; }
}
DoSomething<Class1, int>(cl => cl.IntProp); // this compiles
DoSomething<Class1, ?>(cl => cl.IntProp, cl => cl.StringProp); // this won't compile
是宣告多個多載的唯一解決方案DoSomething,每個多載都有更多的運算式引數嗎?
在方法內部,我實際上只想記錄PropertyInfo(作為最后的手段,我什至會選擇屬性名稱),那么有沒有更簡單的方法來實作呢?
uj5u.com熱心網友回復:
在你的情況下,因為你只需要PropertyInfo與每個運算式相關的,并且回傳型別不是問題,你可以使用object你的TReturn:
public static void DoSomething<TDataType>(
params Expression<Func<TDataType, object>>[] properties)
現在這是有效的,因為每個 lambda 都可以轉換為Expression<Func<Class1, object>>:
DoSomething<Class1>(cl => cl.IntProp, cl => cl.StringProp);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/435079.html
上一篇:如何將匿名物件傳遞給通用函式?
