[英]Cannot use a lambda expression as an argument to a dynamically dispatched operation
我正在嘗試執行以下操作
int myObject = getValues(someVar).Sum(x => Int32.Parse(x.Price))
該函數如下所示:
List<dynamic> getValues(string something) {...}
這是我收到的錯誤:“不能將lambda表達式用作動態分派操作的參數”
如何在類似於LINQ SUM的鏈式調用中求和List對象的值?
您的代碼有效。 您遇到的問題不在您發布的代碼中。 此代碼運行。
void Main() {
int myObject = getValues("12").Sum(x => Int32.Parse(x.Price));
Console.WriteLine (myObject);
}
List<dynamic> getValues(string something) {
var item = new { Price = something };
IEnumerable<dynamic> items = Enumerable.Repeat<dynamic>(item, 2);
return items.ToList();
}
這產生輸出24
。 問題可能與類型推斷有關,但這只是一個猜測。 您應該包括足夠的代碼來重現該錯誤,以獲得更可靠的答案。
如評論中所述,此代碼對我來說很好用:-
public static void Main()
{
var result = GetData("test").Sum(x => int.Parse(x.Name));
Console.WriteLine(result);
}
public static List<dynamic> GetData(string x)
{
List<dynamic> data = new List<dynamic>
{
new { Id =1, Name ="1"},
new { Id =2, Name ="4"},
new { Id =3, Name ="5"}
};
return data;
}
我得到10
作為輸出。
所以最終發現問題是我將動態變量傳遞給函數調用,隨后又使用了LINQ / lambda。 似乎是編譯器的禁忌...
dynamic someVar = new {a=1,b=2};
int myObject = getValues(someVar.a).Sum(x => Int32.Parse(x.Price))
您的getValues
方法返回一個dynamic
,而不是List<dynamic>
。 更改方法簽名或從結果中構造一個new List<dynamic>(...)
。
dynamic list = new [] {new{Price = "1"},new{Price = "2"}};
// This produces the error you're describing:
Console.WriteLine(list.Sum(x => Int32.Parse(x.Price)));
// This works.
Console.WriteLine(new List<dynamic>(list).Sum(x => Int32.Parse(x.Price)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.