簡體   English   中英

C#動態並使用IEnumerable集合

[英]C# dynamic and working with IEnumerable collections

在今天遇到Massive的一些問題后,我決定創建一個簡單的測試程序來說明問題。 我想知道,我在這段代碼中犯的錯誤是什么:

var list = new List<string>
               {
                   "Hey"
               };

dynamic data = list.Select(x => x);

var count = data.Count();

最后一行拋出錯誤: 'object'不包含'Count'的定義

為什么“數據”被視為對象? 出現此問題是因為我正在調用擴展方法嗎?

以下代碼有效:

var list = new List<string>
               {
                   "Hey"
               };

dynamic data = list.Select(x => x);

foreach (var s in data)
{
}

為什么在這種情況下“數據”被正確地視為IEnumerable?

是的,那是因為Count()是一種擴展方法。

擴展方法形式的動態類型不支持擴展方法,即調用它們就像實例方法一樣。 來源

foreach (var s in data)工作,因為data 必須實現IEnumerable作為foreach源 - 在執行期間執行(IEnumerable)data轉換。

在嘗試執行以下操作時,您可以看到該機制:

dynamic t = 1;

foreach (var i in t)
    Console.WriteLine(i.ToString());

運行時拋出異常: Cannot implicitly convert type 'int' to 'System.Collections.IEnumerable'

似乎擴展方法不適用於動態對象(請參閱Jon的回答 )。 但是,您可以直接將它們稱為靜態方法:

var count = Enumerable.Count(data); // works

暫無
暫無

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

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