簡體   English   中英

不能將lambda表達式用作動態分派操作的參數

[英]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.

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