Выполнение foreach в массиве
Я пытаюсь сделать цикл foreach, где он будет выбирать каждую строку в моем массиве и добавлять ее к пути, который является строкой и хранит путь для изображения, это то, что у меня так далеко:
string[] Images = new string[] { "Star_00001.png", "Star_00002.png", "Star_00003.png" };
string Path = "Assets/Images/";
if (LevelUp)
{
foreach()
{
}
}
Как вы можете видеть, я хочу, чтобы цикл foreach проходил через каждую строку в массиве Images, для каждой строки в массиве Images я хочу, чтобы он был добавлен в строку пути, поэтому конечный результат, например, будет "Assets/Images/Star_00001"..png"
Кто-нибудь знает, как мне это сделать?
3 ответа
string[] Images = new string[] { "Star_00001.png", "Star_00002.png", "Star_00003.png" };
string path = "Assets/Images/";
if (LevelUp)
Images = Images.Select(image => Path.Combine(path, image)).ToArray();
Не рекомендуется создавать пути к файлам с помощью конкатенации строк. Рекомендуемый способ - использовать Path.Combine, который предоставляется в System.IO. Рассмотрим пример ниже:
string[] Images = new string[] { "Star_00001.png", "Star_00002.png", "Star_00003.png" };
string path = "Assets/Images/";
if (LevelUp)
{
foreach (string s in Images)
{
// You can store result in an array or sth depending on what you
// are trying to achieve
string result = Path.Combine(path, s);
}
}
foreach
цикл имеет синтаксис:
foreach(T ident in collection) {
с T
тип элементов, ident
имя переменной и collection
объект, который поддерживает IEnumerable
интерфейс.
Таким образом, вы можете реализовать:
string[] images = new string[] { "Star_00001.png", "Star_00002.png", "Star_00003.png" };
string path = "Assets/Images/";
if (LevelUp) {
foreach(string file in images) {
string thepath = Path.Combine(path,file);
//do something with file or thepath, like
Console.WriteLine(thepath);
}
}
И последнее замечание: консенсус C# состоит в том, что переменные начинаются со строчной буквы, а имена типов - с заглавной.