2013-05-15 84 views
0

現在這一個讓我難住,所以我希望得到一些幫助。我有這個代碼在.NET 4.0應用程序中測試,並且它工作正常。但是,當我將它移回到我的3.5環境中時,我在構建時收到以下錯誤消息。System.Linq.IOrderedEnumerable不包含'ToList'的定義

System.Linq.IOrderedEnumerable不包含關於「ToList」和最好的擴展方法過載「System.Linq.Enumerable.ToList(System.Collections.Generic.IEnumerable)」的定義有一些無效參數

它抱怨的代碼是用於GetReportValues方法下面

List<String> PathValues = GetReportValues(settings.DirectoryDefinition.NameTokens.OrderBy(x => x.Index).ToList<Token>()); 

簽名是如下

private List<String> GetReportValues(List<Token> TokenList) 
{ 
    List<String> PathValues = new List<String>(); 
/// code goes here 
    return PathValues; 
} 

和NameTokens,我有

[XmlElement(Type = typeof(List<DirectoryPatternToken>))] 
    public List<DirectoryPatternToken> NameTokens { get; set; } 

DirectoryDe​​finition.NameTokens對象是含有Token類派生的對象的列表。 GetReportValues只是需要標記列表,其中DirectoryDe​​finition

[Serializable] 
public class DirectoryPatternToken : Token 
{ 


} 

正如我剛纔解釋,這個試驗以及在.NET 4.0中。我怎樣才能得到這個工作在3.5?在此先感謝

+0

您不能將集合作爲IOrderedenumerable傳遞給函數嗎? – Ketchup

回答

1

變化.ToList<Token>().ToList<string>()

或者乾脆把它寫成.ToList()

或不使用它在所有的,因爲你的方法已經返回List<string>

+0

令牌對象不是簡單的字符串。令牌本身就是一個複雜的類型。 – Kobojunkie

+0

@Kobojunkie你寫道:'GetReportValues方法的簽名如下:private ** List ** GetReportValues(......)' – I4V

+0

是的,它返回一個字符串列表,但它不包含字符串列表 – Kobojunkie

0
List<DirectoryPatternToken> tokens = 
      settings.DirectoryDefinition.NameTokens.OrderBy(x => x.Index).ToList(); 
List<string> pathValues = GetReportValues(tokens); 

,從中可以提取字符串屬性

+0

NameTokens是從Token類派生的DirectoryPatternToken對象的通用列表。 – Kobojunkie

+0

@Kobojunkie,在這種情況下,第一條語句應該可以正常工作 –

+0

ToList()會導致GetReportValues抱怨無效的參數。所以ToList()不起作用。 – Kobojunkie

0

C#4.0實現了一個fea TURE稱爲通用協方差:

http://msdn.microsoft.com/en-us/library/dd799517(v=vs.100).aspx

這允許列表< DirectoryPatternToken>到作爲List <令牌>因爲DirectoryPatternToken從令牌導出處理。由於C#3.5不具備此功能,你將不得不使用這些線讓你的代碼編譯:

List<String> PathValues = GetReportValues(NameTokens.OrderBy(x => x.index).ToList<DirectoryPatternToken>()); 

private static List<String> GetReportValues(List<DirectoryPatternToken> TokenList) 
0

你正在尋找的ToList方法是一個擴展方法。嘗試在文件頂部添加使用指令:

using System.Linq;通過添加此使用指令,您向編譯器指示應該導入該名稱空間中的任何擴展方法。

相關問題