Если вы хотите узнать путь любого запущенного процесса, попробуйте это.
Функция
blockquote>[DllImport("Kernel32.dll")] private static extern bool QueryFullProcessImageName([In] IntPtr hProcess, [In] uint dwFlags, [Out] StringBuilder lpExeName, [In, Out] ref uint lpdwSize); public static string GetMainModuleFileName(this Process process, int buffer = 1024) { var fileNameBuilder = new StringBuilder(buffer); uint bufferLength = (uint)fileNameBuilder.Capacity + 1; return QueryFullProcessImageName(process.Handle, 0, fileNameBuilder, ref bufferLength) ? fileNameBuilder.ToString() : null; }
Использование
blockquote>var process = Process.GetProcessesByName("Process").First(); string path = process.GetMainModuleFileName();
Надеюсь, это поможет.
var myString = new string[]{first, second, third, fouth, fifth}
.FirstOrDefault(s => !string.IsNullOrEmpty(s)) ?? "";
//if myString == "", then none of the strings contained a value
править: удалено Where (), предикат помещен в FirstOrDefault (), спасибо Юрий
Если ваши строки находятся в IEnumerable
, вы можете использовать First
или FirstOrDefault
:
strings.First(s => !string.IsNullOrEmpty(s))
Да.
string selected = null;
foreach(string currStr in strArray)
if(String.IsNullOrEmpty(currStr)==false)
{
selected = currStr;
break;
}
Никаких деревьев выражений, никакого злоупотребления LINQ, никаких непонятных языковых функций. Такая же производительность во время выполнения, и студент-первокурсник может понять, что вы делаете.
Определите метод расширения:
static string Or(this string value, string alternative) {
return string.IsNullOrEmpty(value) ? alternative : value;
}
Теперь вы можете сказать следующее:
string result = str1.Or(str2).Or(str3).Or(str4) …
private static string FirstNonEmptyString(params string[] values)
{
return values.FirstOrDefault(x => !string.IsNullOrEmpty(x));
}
Называется так:
Console.WriteLine(FirstNonEmptyString(one, two, three, four, five) );
var found = new[]{first, second, third, fourth, fifth}.FirstOrDefault(x =>!String.IsNullOrEmpty(x));
Если вы используете .NET 3.5, это очень просто с помощью Linq.
string[] strings = new[] {"", "a", "b", ""};
string firstNotNullOrEmpty =
strings.Where(s => !String.IsNullOrEmpty(s)).FirstOrDefault();