Необходимо использовать System.IO.Path.GetTempFileName()
, Создает исключительно именованный, нулевой байт временный файл на диске и возвращает полный путь того файла.
можно использовать System.IO.Path.GetDirectoryName(System.IO.Path.GetTempFileName())
для получения только временной информации папки, и создать папки там
Они создаются в папке временного файла окон, и это, рассматривают лучшую практику
Вы используете более короткую форму лямбда-выражений, которая допускает только одиночные выражения.
Вам нужна длинная форма, которая позволяет использовать несколько операторов.
Например:
items.ForEach(item => {
if (item.Contains("I Care About"))
whatICareAbout += item + ", ";
});
Проблема заключалась в том, что выражение
item.Contains("I Care About") ? whatICareAbout += item + "," : whatICareAbout += ""
не является утверждением . Он просто возвращает значение типа string
.
Есть трюк, чтобы заставить его работать (просто для удовольствия):
items.ForEach(item => (item.Contains("I Care About") ?
whatICareAbout += item + "," : whatICareAbout += "").GetType());
Я просто добавил вызов .GetType ()
] для создания оператора из исходного выражения, и он скомпилирован.
Чего вы пытаетесь достичь? Вы пытаетесь сформировать строку элементов, разделенных запятыми, где они содержат определенное значение? В linq этого можно добиться, используя следующее:
List<string> items = new List<string> { "Item 1", "Item 2", "Item I Care About", "Item I Care About", "Item I Care About" };
string whatICareAbout = items.Where(x => x.Contains("I Care About"))
.Aggregate( (y, z) => y + ", " + z);
Результатом этого будет «Элемент, о котором я забочусь, элемент, о котором я забочусь, элемент, о котором я забочусь».
Примечание: Агрегирование - отличный способ убедиться, что нет конечный ","
Попробуйте заключить скобки:
items.ForEach(item => item.Contains("I Care About") ? (whatICareAbout += item + ",") : (whatICareAbout += "") );
+ = имеет более высокий приоритет, чем?, Возможно, поэтому вы получаете сообщение об ошибке. С помощью скобок ошибка может исчезнуть. Хотя не на 100% уверен в этом ... лямбда-выражения могут иметь дополнительные ограничения, которые не позволяют использовать операторы присваивания.
ОБНОВЛЕНИЕ:
Вместо нескольких операторов + = гораздо проще поместить условное выражение справа -ручная сторона присваивания, например:
List<string> items = new List<string> { "one", "two", "three" };
string whatICareAbout = "";
items.ForEach(item => whatICareAbout += item.Contains("I Care About") ? (item + ",") : "");
ОБНОВЛЕНИЕ 2:
Но даже лучше просто использовать Aggregate (), поскольку он разработан именно для этого сценария. Вот один пример:
string whatICareAbout = items.Aggregate("", (total, item) => item.Contains("I Care About") ? (total + item + ",") : total);
Но я думаю @Matt Breckon ' s ответ выше (который я только что видел, когда собирался опубликовать это) даже лучше, чем мой пример, поскольку он касается удаления терминала ",". Посмотрите на его ответ ...: -)