2016-01-23 59 views
2

我有我創建的自定義列表,其中包含完整的文件夾路徑和相應的版本號。我將這兩個值都存儲在一個列表中。我想讓他們獲得存儲在列表中的最高X版本及其相應的文件夾路徑。我一直在努力,但現在需要幫助。到目前爲止,我已經得到了代碼如下:訂購和從自定義列表中獲取數據 - C#

這是我的列表類:

class versionFolder 
{ 
    public int version { get; set; } 
    public string folderDIR { get; set; } 

    public versionFolder(int version, string folderDIR) 
    { 
     this.version = version; 
     this.folderDIR = folderDIR; 
    } 

} 

這裏是我創建列表和添加項目到它的代碼。在底部,我想打印列表中的內容(版本和文件夾路徑),然後在底部,我想獲得由深度變量設置的最高X版本。

public highestVersion(string dsPath, int depth) 
    { 
     int num = depth; 
     List<versionFolder> allVersions = new List<versionFolder>(); //list to hold all version numbers and full path 

     string folder = dsPath; 
     string[] versionDIRS = Directory.GetDirectories(folder); 

     foreach (string folderr in versionDIRS) 
     { 
      string[] fullpath = folderr.Split('\\'); 

      string folderName = fullpath[fullpath.Length - 1]; //returns VXX-XXXXXXXX (version folder name) 
      string vString = "6"; //sets a version number, this is actually data extrapolated from the folder path 
      allVersions.Add(new versionFolder(Convert.ToInt32(vString), fullpath.ToString())); 
     } 



     foreach (var version in allVersions) 
     { 
      Console.WriteLine("Amount is {0}", version.version); 
      Console.WriteLine("Amount is {0}", folderDIR.folderDIR); 
     } 
     var testtt = allVersions.OrderByDescending(n => n.version).Take(Convert.ToInt32(num)); 
     Console.Write("Test:" + testtt); 
    } 

輸出對於版本號很好,但我無法獲得folderDIR。 爲獲得最高的X值輸出返回此:

Test:System.Linq.Enumerable+<TakeIterator>d__3a`1[Importer.versionFolder] 

任何幫助將非常感激。

編輯:我想這可能是值得一提的是,我在使用.NET 3.5

+0

at:allVersions.Add(new versionFolder(Convert.ToInt32(vString),fullpath.ToString()));您正在將完整路徑字符串數組轉換爲字符串。但實際版本文件夾的文件夾字符串不是字符串數組格式 – SarveshwarPM

回答

2

Take()方法的返回值類型是IEnumerable,如果你想獲得的返回類型List<T>,只需撥打ToList()方法。如果您只想獲得foldDir字段,則請撥打Select方法。

public IList<string> HighestVersion(int topCount) 
    { 
     List<VersionFolder> vfList = new List<VersionFolder> 
     { 
      new VersionFolder(1, "A"), 
      new VersionFolder(4, "B"), 
      new VersionFolder(3, "C") 
     }; 

     vfList = vfList.OrderBy(v => v.Version).Take(topCount).ToList(); 

     foreach (VersionFolder versionFolder in vfList) 
     { 
      Console.WriteLine(versionFolder.FolderDir); 
     } 

     //return folderDir only 
     return vfList.Select(v=>v.FolderDir).ToList(); 
    } 
+0

非常感謝。它的工作原理是它獲得最高的X值,但輸出是: System.String [] System.String [] System.String []。 我猜這是因爲versionFolder.FolderDIR是一個數組?對不起,我對此有點新鮮。謝謝你的幫助。 – SteveMaybes

+0

@SteveMaybes對不起,我想你有另外一個問題,這是由這一行'allVersions.Add(new versionFolder(Convert.ToInt32(vString),fullpath.ToString()));','fullpath'是一個數組,如果你想將它轉換爲字符串,可以使用'string.Join(「,」,fullpath)'而不是'fullpath.ToString()'。 – Zen