2016-04-10 4 views
1

Как я могу вернуть несколько массивов с разными значениями? В моей первой функции я получаю все файлы, которые находятся в моей папке.Возвращение нескольких массивов с разными значениями

В моей второй функции я извлекаю для каждого файла «modDesc.xml» и получаю из него свою информацию. Теперь я хочу вернуть для каждого файла массив со всей этой информацией! Но я не знаю, как .. Надеюсь, кто-то может мне помочь!

Вот мой код:

public string[] openDirectory(string DirectoryPath) 
{ 
    string[] files = Directory.GetFiles(DirectoryPath, "*.zip"); 

    return files; 
} 


public string[] getModDesc(string DirectoryPath) 
{ 
    string[] files = openDirectory(DirectoryPath); 

    foreach (var file in files) 
    { 
     using (ZipFile zip = ZipFile.Read(file)) 
     { 
      ZipEntry modDescHandler = zip["modDesc.xml"]; 

      if (modDescHandler != null) 
      { 
       if (File.Exists("tmp\\modDesc.xml")) 
       { 
        File.Delete("tmp\\modDesc.xml"); 
       } 

       modDescHandler.Extract("tmp"); 

       XDocument modDesc = XDocument.Load("tmp\\modDesc.xml"); 
       string modTitle = null; 
       string modAuthor = null; 
       string modVersion = null; 
       string modFileName = null; 

       try 
       { 
        modTitle = modDesc.Element("modDesc").Element("title").Element("de").Value; 
        modAuthor = modDesc.Element("modDesc").Element("author").Value; 
        modVersion = modDesc.Element("modDesc").Element("version").Value; 
       } 

       catch 
       { 

       } 

       modFileName = Path.GetFileName(file); 

       string[] modInformation = { modTitle, modAuthor, modVersion, modFileName }; 

       File.Delete("tmp\\modDesc.xml"); 

       return modInformation; 

      } 
     } 
    } 

    return new string[0]; 
} 

ответ

1

Вы можете вернуть List<string[]> (то есть список массивов), который будет содержать коллекцию массивов для каждого файла:

public List<string[]> getModDesc(string DirectoryPath) 
{ 
     // Create a list to store your arrays 
     List<string[]> fileInformation = new List<string[]>(); 

     // Get your files 
     string[] files = openDirectory(DirectoryPath); 
     foreach (var file in files) 
     { 
       using (ZipFile zip = ZipFile.Read(file)) 
       { 
        // All your code (omitted for brevity) 

        // Create your array for this file 
        string[] modInformation = { modTitle, modAuthor, modVersion, modFileName }; 

        // Add this to your list 
        fileInformation.Add(modInformation); 
       } 
     } 
     // At this point your arrays collection should have all of your 
     // arrays, so return it 
     return fileInformation; 
    } 
} 

Или если имена ваших файлов были уникальными и вы хотите ред, чтобы сделать доступ к ним немного легче, вы можете хранить их в словарь, который позволит вам смотреть каждый вверх по его имени:

public Dictionary<string,string[]> getModDesc(string DirectoryPath) 
{ 
    // Create a list to store your arrays 
    Dictionary<string,string[]> fileInformation = new Dictionary<string,string[]>(); 

    // Get your files 
    string[] files = openDirectory(DirectoryPath); 
    foreach (var file in files) 
    { 
      using (ZipFile zip = ZipFile.Read(file)) 
      { 
       // All your code (omitted for brevity) 

       // Create your array for this file 
       string[] modInformation = { modTitle, modAuthor, modVersion, modFileName }; 

       // Add this to your dictionary, mapping the file name 
       // to it's information 
       fileInformation.Add(modFileName,modInformation); 
      } 
    } 
    // At this point your dictionary should have all of your 
    // arrays, so return it 
    return fileInformation; 
} 

}

Затем, если вы хотите получить доступ к информации из файла в вашем словаре вы можете просто использовать:

string[] information = yourDictionary["YourFileName"]; 
+0

Спасибо! Я думаю, что это работает ..: P Как я могу получить значение из списка? – Cryrexon

+0

Вы можете либо перебирать его с помощью цикла, либо использовать 'yourList.ElementAt (index)' для вытягивания определенного индекса. Кроме того, если вы хотите просто вернуть массив массивов, вы можете изменить возвращаемый тип вашего метода на 'string [] []' и просто изменить 'return fileInformation', чтобы' return fileInformation.ToArray() ', тогда вы могли бы ссылайтесь на значения по их индексу (как и в любом другом массиве). –

+0

У меня есть цикл foreach 'foreach (var file in fileInformaton)', и теперь я хочу получить информацию из массива в другой список 'var list = new Mod {isModEnabled = true, modTitle = file [] []};' Как я могу их получить? Извините, что я новичок:] – Cryrexon

Смежные вопросы