2016-01-23 5 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); 
    } 

Выходной код подходит для номера версий, но я не могу получить папкуDIR. Выход для получения наибольших значений X возвращает это:

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

Любая помощь будет оценена.

EDIT: Я думал, что это может быть, стоит отметить, что у меня использовать .NET 3.5

+0

В: allVersions.Add (новый versionFolder (Convert.ToInt32 (vString), fullpath.ToString())); вы преобразовываете массив строк fullpath в строку. Но фактическая папка versionFolderDir находится в строковом строковом массиве формата – 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 (новая версияFolder (Convert.ToInt32 (vString), fullpath.ToString()));', 'fullpath' - массив , если вы хотите преобразовать его в строку, используйте 'string.Join (", ", fullpath)' вместо 'fullpath.ToString()'. – Zen