Как контролировать вывод оператором if - PullRequest
0 голосов
/ 05 июля 2019
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);
}

Я пытаюсь сделать здесь как можно меньше копий.Мой вопрос состоит в том, как уменьшить этот код, чтобы просто применить оператор if только для первого бита информации vm.Name, а не для всей строки вывода?

Ответы [ 6 ]

3 голосов
/ 05 июля 2019

Вы можете использовать что-то вроде,

    //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 fiddle

2 голосов
/ 05 июля 2019

Используйте выражение. Примерно так:

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);
0 голосов
/ 05 июля 2019

Я бы сделал это так. Красиво, легко и читабельно.

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);
0 голосов
/ 05 июля 2019

Вы можете объявить атрибут 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);
0 голосов
/ 05 июля 2019

Всегда ли та часть, которая вам известна, заменяет ее ...? Это не самое хорошее, но должно работать.

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}\" ")
}
0 голосов
/ 05 июля 2019
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. Ничто лучше не пришло мне в голову.

...