Строка соединения в зависимости от условия - PullRequest
0 голосов
/ 04 марта 2020

У меня есть три свойства объекта, и я хочу добавить строку, основанную на том, какое свойство выбрано, а также включает комбинации. Я хочу эффективное решение, которое выглядит аккуратно. Свойства имеют логический тип. Appointment.IsDocumentAvailable, Appointment.IsCartChecked, Appointment.IsFinal основываясь на этих значениях, я хотел бы добавить соответствующее значение в строку.

Например,

string tempString;

if(Appointment.IsDocumentAvailable) tempString = 'Bzd';

if(Appointment.IsCartChecked) tempString = 'Wkb';

if(Appointment.IsFinal) tempString = 'Alles';

А теперь все возможные комбинации. Есть ли более аккуратный способ, чем несколько комбинаций if-else, сделать это?

Ответы [ 3 ]

4 голосов
/ 04 марта 2020

вы можете использовать:

System.Text.StringBuilder builder = new System.Text.StringBuilder();

builder.Append(Appointment.IsDocumentAvailable ? "Bzd" : "");
builder.Append(Appointment.IsCartChecked ? "Wkb" : "");
builder.Append(Appointment.IsFinal ? "Alles" : "");

var tempString = builder.ToString();
3 голосов
/ 04 марта 2020

Вы можете использовать класс StringBuilder для этого с любым количеством комбинаций и, наконец, получить строку результата:

var builder = new StringBuilder();
if (Appointment.IsDocumentAvailable)
    builder.Append("Bzd");
if (Appointment.IsCartChecked)  
    builder.Append("Wkb");
if (Appointment.IsFinal) 
    builder.Append("Alles");
...
var tempString = builder.ToString();

Начиная с обычного string в C# является неизменным , StringBuilder рекомендуется для создания строк, которые можно динамически изменять. Не забудьте добавить using System.Text; в директивах using.

1 голос
/ 04 марта 2020

Вы можете создать StringBuilder метод расширения , который будет принимать предикат и, если это правда, добавит предоставленный текст.

public static class StringBuilderExtensions
{
    public static void AppendPredicate(this StringBuilder stringBuilder, Func<bool> func, string text)
    {
        if (func())
        {
            stringBuilder.Append(text);
        }
    }
}

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

var tempString =  new StringBuilder();
tempString.AppendPredicate(() => Appointment.IsDocumentAvailable, "Bzd");
tempString.AppendPredicate(() => Appointment.IsCartChecked, "Wkb");
tempString.AppendPredicate(() => Appointment.IsFinal, "Alles");
Console.WriteLine(tempString); // or tempString.ToString()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...