Я хочу вывести строку, которая приветствует пользователя приложения. У меня есть первая, средняя и фамилия пользователя. Я хотел бы написать полное имя пользователя, т.е. "Hello {0} {1} {2}"
с первым, средним и последним параметрами. Однако, если среднее имя пустое, мне не нужны два пробела между первой и последней именами, а всего лишь одно пространство. Я, очевидно, могу сделать это с помощью "if", но есть ли более элегантный способ достичь этого?
Спасибо
string.Format("{0} {1} {2}", first, middle, last).Replace(" "," ")
Возможно, стоит создать класс Name
, у которого есть свойство Full
, которое позаботится об этой логике (т.е. напечатает "John Smith"
, если нет среднего имени или "John A. Smith"
, если есть).
Тогда ваш код будет выглядеть следующим образом:
var name = new Name(first, middle, last);
var message = string.Format("Hello {0}", name.Full);
Вы также можете рассмотреть возможность добавления свойства LastFirstMiddle
(чтобы получить форматированную строку "Smith, John A."
) и любых других свойств, которые имели бы смысл с классом Name
.
"Hello {0} {1}{3}{2}"
где
{3} = param1.IsNullOrEmpty() ? "" : " "
Я использовал этот метод в своих проектах. и это помогает много.
public string LogicFullName(string fName)
{
string logicName = String.Empty;
string[] splitFullName = fName.Trim().Split(' ');
for (int i = 0; i < splitFullName.Length; i++)
{
if (logicName == String.Empty && i == 0)
{
logicName = splitFullName[i].Trim();
}
else
{
if (splitFullName[i] != String.Empty)
logicName = logicName + " " + splitFullName[i].Trim();
}
}
return logicName;
}
var hello =
(from name in new[] { "Hello", firstName, middleName, lastName }
where !string.IsNullOrEmpty(name))
.Aggregate((xs, x) => xs + " " + x);
или
var hello = string.Join(" ",
(from name in new[] { "Hello", firstName, middleName, lastName }
where !string.IsNullOrEmpty(name))
.ToArray());
Один из способов добиться этого - поместить пространство в строку параметров. Например (только первое и последнее имя в качестве примера)
Console.WriteLine("Hello {0}{1}{2}",
firstName,
String.IsNullOrEmpty(firstName) ? String.Empty : " ",
lastName);