Вы можете сделать это с помощью сопоставления с образцом :
var result = s.Split(' ') is var names && names.Length > 1 ?
new Tuple<string, string>(string.Join(" ", names.Take(names.Length - 1)), names.Last()) :
new Tuple<string, string>(displayName, string.Empty);
Шаблон var
является универсальным для любого типа или значения.
(Iпревратил ваши звонки в .Count()
в .Length
, поскольку это более идиоматично для массивов).
Я бы рекомендовал использовать ValueTuple вместо Tuple<T>
:
var result = s.Split(' ') is var names && names.Length > 1 ?
(string.Join(" ", names.Take(names.Length - 1)), names.Last()) :
(displayName, string.Empty);
Используя диапазоны C # 8 , вы можете записать это как:
var result = s.Split(' ') is var names && names.Length > 1 ?
(string.Join(" ", names[0..^1]), names[^1]) :
(displayName, string.Empty);
(Обратите внимание, что разделение имен с использованием string.Split
может быть не лучшим способом, и разделение их вообщеэто, вероятно, плохая идея! Смотрите другие отличные ответы здесь).