2012-02-11 42 views
0

一個IEnumerable對象分配給列表我有一個返回一個IEnumerable對象的方法(方法A)。如何用C#

目的是具有以下字段的datacontract類:

Id 
TotalViews 

我有另一種方法(方法B),該呼叫調用方法A

方法A具有以下:

List<string> response; 

response = ExecuteRequest(uri).Select(d => new {d.Id, d.TotalViews }).ToList(); 

我嘗試了IEnumerable對象分配給一個列表。

的,因爲我得到的錯誤,上面不起作用。

錯誤

不能隱式轉換類型system.collections.generic.list到system.collections.generic.list

如何分配所有的IEnumerable對象名單?

回答

4

你不能 - 因爲結果不是列表。

你可以轉換它的字符串列表,例如

List<string> response = ExecuteRequest(uri) 
           .Select(d => new {d.Id, d.TotalViews }.ToString()) 
           .ToList(); 

......但我懷疑這就是你真正想要的。你應該問自己:

  • 你爲什麼最初申報responseList<string>
  • 真的想要什麼類型的?
  • 如果你想對ID/TOTALVIEWS的按匿名類型,有三個選項:
    • 如果你只需要它的方法中的強類型,你可以用匿名類型棒,和聲明變量與var
    • 否則......你可以用IdTotalViews性質建立自己的類型...
    • ...或者你可能使用Tuple<,>如果你使用.NET 4

下面是一個使用匿名類型的版本:

// The compiler knows the type of response, but you can't express it in normal 
// C#, because it's IEnumerable<X> where X is the anonymous type... which you 
// can't specify the name of, because it's anonymous... 
var response = ExecuteRequest(uri).Select(d => new {d.Id, d.TotalViews }) 
            .ToList(); 
1

你有宣佈串的名單,但你想分配匿名類型的列表。你可以選擇其中一個選項:

  • 更改聲明匹配您要指定類型(在這種情況下,一個匿名類型):

    var response = ExecuteRequest(uri).Select(d => new {d.Id, d.TotalViews }).ToList(); 
    

注你不能從方法返回一個匿名類型。

  • 更改類型,您正試圖分配相匹配的聲明(在這種情況下,List<string>):

    response = ExecuteRequest(uri).Select(d => 
         string.Format("{0} {1}", d.Id, d.TotalViews) 
        ).ToList(); 
    
  • 變化。也許Dictionary<int, int>會更好地滿足您的需求?

1

您正在試圖從東西和d.Idd.TotalViews製作成字符串列表的匿名類型。

在對結果調用ToList之前,可以從這兩者中創建一個字符串,或者爲這些類創建一個包含類,並列出這些類的列表而不是String

public class TotalViewsPerId 
{ 
    public int Id {get;set;} 
    public int TotalViews {get;set;} 
} 

List<TotalViewsPerId> response = ExecuteRequest(uri) 
           .Select(d => new TotalViewsPerId{d.Id, d.TotalViews }) 
           .ToList();