Как объединить несколько строк с условиями? - PullRequest
1 голос
/ 14 октября 2011

У меня есть следующий код:

string result = string.Join(",", 
someCondition1 ? str1 : string.Empty,
someCondition2 ? str2 : string.Empty,
someCondition3 ? str3 : string.Empty,
//some other conditions like those
......
);

Если у меня есть:

someCondition1 = true; str1 = "aaa";
someCondition2 = false; str2 = "bbb";
someCondition3 = true; str3 = "ccc";

Тогда результат выглядит как «aaa ,, ccc», но мне нужно «aaa, ccc» (нет пустой строки).Какой лучший способ сделать это?

Ответы [ 4 ]

10 голосов
/ 14 октября 2011

Как насчет чего-то вроде:

// Or use a List<string> or whatever...
string[] strings = new string[] { someCondition1 ? str1 : null,
                                  someCondition2 ? str2 : null,
                                  someCondition3 ? str3 : null };

// In .NET 3.5 
string result = string.Join(",", strings.Where(x => x != null));

Вам действительно нужно иметь шесть отдельных переменных?Если бы у вас уже была коллекция значений и условий (отдельно или вместе), она была бы более элегантной.

1 голос
/ 14 октября 2011

Как насчет того, чтобы просто ввести некоторые операторы if?

StringBuilder result = new StringBuilder();

if(someCondition1)
 result.Append(str1);
if(someCondition2)
 result.Append(str2);
if(someCondition3)
 result.Append(str3);
0 голосов
/ 14 октября 2011

Даже вы можете использовать как это также

string result = (someCondition1 ? str1 + "," : String.Empty + (someCondition2 ? str2
+ ",": String.Empty) + (someCondition3 ? str3 : String.Empty);
0 голосов
/ 14 октября 2011

Если вы планируете делать это много, вы можете создать свой собственный класс, чтобы сделать это для вас хорошим способом.Я не утверждаю, что это лучший способ, но всегда интересно делать такие вещи:

public static class BooleanJoiner
{
    public static string Join(params Tuple<bool, string>[] data)
    {
        StringBuilder builder = new StringBuilder();
        int curr = 0;
        foreach (Tuple<bool, string> item in data)
        {
            if (item.Item1)
            {
                if (curr > 0)
                    builder.Append(',');
                builder.Append(item.Item2);
            }
            ++curr;
        }
        return builder.ToString();
    }   // eo Join
}

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

        string result = BooleanJoiner.Join(new Tuple<bool, string>(true, "aaa"),
                                           new Tuple<bool, string>(false, "bbb"),
                                           new Tuple<bool, string>(true, "ccc"));
...