if (vm.Name != null)
{
Console.WriteLine("VM name is \"{0}\" and ID is \"{1}\". State is: \"{2}\". Location: \"{3}\" and the Instance Type is \"{4}\". Key is \"{5}\".",
vm.Name, vm.InstanceId, vm.State, vm.Region, vm.InstanceType, vm.KeyName);
}
else
{
Console.WriteLine("VM ID is \"{0}\". State is: \"{1}\". Location: \"{2}\" and the Instance Type is \"{3}\". Key is \"{4}\".",
vm.InstanceId, vm.State, vm.Region, vm.InstanceType, vm.KeyName);
}
Я стараюсь делать здесь как можно меньше копипаста. Мой вопрос заключается в том, как уменьшить этот код, чтобы просто применять если-утверждение только для первого бита информации vm.Name, а не для всей строки вывода?
Вы изучали интерполяцию строк и условную логику? thebillwagner.com/Блог/Элемент/…
Рефакторизация предложения. Полностью стоит.





Вы можете использовать что-то вроде,
//Here you will check condition and format first few words of sentences
var str = vm.Name != null ? $"name is {vm.Name} and " : string.Empty;
//if name is not null then add it to zeroth position otherwise add empty string
Console.WriteLine($"VM {str}ID is {vm.InstanceId}. State is: {vm.State}. Location: {vm.Region} and the Instance Type is {vm.InstanceType}. Key is {vm.KeyName}.");
Бонус: .net рабочий пример
var firstPart = string.Empty;
if (vm.Name != null)
{
firstPart = $"VM name is {vm.Name}";
}
else
{
firstPart = $"VM ID is {vm.InstanceId}";
}
Console.WriteLine($"{firstPart}. State is: {vm.State}. Location: {vm.Region} and the Instance Type is { vm.InstanceType}. Key is {vm.KeyName}.");
Вы можете изменить имя переменной firstPart. Ничего лучше мне в голову не приходило.
Замените ту часть, которая, как вы знаете, всегда была...? Это не самое приятное, но должно работать.
var output = string.Format("VM ID is \"{0}\". State is: \"{1}\". Location: \"{2}\" and the Instance Type is \"{3}\". Key is \"{4}\".",
vm.InstanceId, vm.State, vm.Region, vm.InstanceType, vm.KeyName);
if (vm.Name != null) {
output.Replace("VM ", $"VM name is "\"{vm.Name}\" ")
}
Используйте выражение. Что-то вроде этого:
Console.WriteLine(
"VM {0}ID is \"{1}\". State is: \"{2}\". Location: \"{3}\" and the Instance Type is \"{4}\". Key is \"{5}\".",
vm.Name != null ? $"name is \"{vm.Name}\" and " : string.Empty, vm.InstanceId,
vm.State, vm.Region, vm.InstanceType, vm.KeyName);
Мне нравится это решение - короткое и простое. Спасибо.
вы можете объявить атрибут Name как обнуляемый
и сделать что-то вроде этого:
string val;
if (vm.Name != null)
{
val = "VM name is \"{0}\" and";
}
else
{
val = "VM";
}
Console.WriteLine(
val + " ID is \"{1}\". State is: \"{2}\". Location: \"{3}\" and the Instance Type is \"{4}\". Key is \"{5}\".",
vm.Name, vm.InstanceId,
vm.State, vm.Region, vm.InstanceType, vm.KeyName);
Я бы сделал это так. Красиво, легко и читабельно.
string VmName = "";
if (vm.Name != null)
VmName = "name is \"" + vm.Name + "\" and";
Console.WriteLine("VM " + VmName + " ID is \"{0}\". State is: \"{1}\". Location: \"{2}\" and the Instance Type is \"{3}\". Key is \"{4}\".",
vm.InstanceId, vm.State, vm.Region, vm.InstanceType, vm.KeyName);
Я думаю, вы можете построить первое предложение отдельно от второго предложения здесь.