Как я возвращаю первую строковую переменную, которая не является пустой или пустой

Если вы хотите узнать путь любого запущенного процесса, попробуйте это.

Функция

[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;
}

Использование

var process = Process.GetProcessesByName("Process").First();
string path = process.GetMainModuleFileName();

Надеюсь, это поможет.

28
задан Cœur 19 February 2017 в 09:23
поделиться

7 ответов

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 (), спасибо Юрий

31
ответ дан 28 November 2019 в 02:57
поделиться

Если ваши строки находятся в IEnumerable, вы можете использовать First или FirstOrDefault :

strings.First(s => !string.IsNullOrEmpty(s))
1
ответ дан bruno conde 28 November 2019 в 02:57
поделиться

Да.

string selected = null;
foreach(string currStr in strArray)
    if(String.IsNullOrEmpty(currStr)==false)
    {
        selected = currStr;
        break;
    }

Никаких деревьев выражений, никакого злоупотребления LINQ, никаких непонятных языковых функций. Такая же производительность во время выполнения, и студент-первокурсник может понять, что вы делаете.

0
ответ дан 28 November 2019 в 02:57
поделиться

Определите метод расширения:

static string Or(this string value, string alternative) {
    return string.IsNullOrEmpty(value) ? alternative : value;
}

Теперь вы можете сказать следующее:

string result = str1.Or(str2).Or(str3).Or(str4) …
18
ответ дан 28 November 2019 в 02:57
поделиться
    private static string FirstNonEmptyString(params string[] values)
    {
        return values.FirstOrDefault(x => !string.IsNullOrEmpty(x));
    }

Называется так:

        Console.WriteLine(FirstNonEmptyString(one, two, three, four, five) );
9
ответ дан 28 November 2019 в 02:57
поделиться
var found = new[]{first, second, third, fourth, fifth}.FirstOrDefault(x =>!String.IsNullOrEmpty(x));
1
ответ дан 28 November 2019 в 02:57
поделиться

Если вы используете .NET 3.5, это очень просто с помощью Linq.

string[] strings = new[] {"", "a", "b", ""};

string firstNotNullOrEmpty = 
    strings.Where(s => !String.IsNullOrEmpty(s)).FirstOrDefault();
1
ответ дан 28 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: