Это манипуляции со строками? - PullRequest
2 голосов
/ 30 апреля 2011
public string Format { get { return string.Format("{0}{1}v{1}", LastManStanding ? "FFA " : string.Empty, m_Teams.PlayersPerTeam); } }

мне лучше использовать StringBuilder?

Я не совсем уверен, насколько неправильно условно форматировать строки, а не делать

public string Format 
{
    get
    {
        StringBuilder sb = new StringBuilder();

        if(LastManStanding)
            sb.Append("FFA ");

        sb.Append(string.Format("{0}v{0}", m_Teams.PlayersPerTeam);
        return sb.ToString();
    }
}

Ответы [ 6 ]

5 голосов
/ 30 апреля 2011

Для таких маленьких строк то, что вы делаете, прекрасно.

Используйте StringBuilder, когда имеете дело с тысячами конкатенаций и / или форматированием строк.


Примечание:

Вместо:

sb.Append(string.Format("{0}v{0}", m_Teams.PlayersPerTeam));

Вы можете сделать:

sb.AppendFormat("{0}v{0}", m_Teams.PlayersPerTeam);
1 голос
/ 30 апреля 2011

Неверно, нет.Удобочитаемый?Meh

Небольшое форматирование может иметь большое значение

public string Format 
{ 
  get 
  { 
    return string.Format("{0}{1}v{1}", 
      LastManStanding ? "FFA " : string.Empty,
      m_Teams.PlayersPerTeam); 
  } 
}
0 голосов
/ 30 апреля 2011

Я бы отделил логику форматирования для FFA и обычных игр:

public string Format 
{
    get
    {
        if(LastManStanding)
            return string.Format("FFA {0}v{0}", m_Teams.PlayersPerTeam);
        else
            return string.Format("{0}v{0}", m_Teams.PlayersPerTeam);
    }
}

Гораздо проще читать.И логически строки формата тоже отдельные.Вполне вероятно, что вы измените их отдельно, и я удивлен, что вы этого не сделали.«FFA 2v2» не имеет для меня особого смысла.

0 голосов
/ 30 апреля 2011

Согласен со всеми - для такой маленькой струны это нормально. Обратите внимание, что ваша перезапись с помощью StringBuilder хуже, поскольку вы используете String.Format вместо StringBuilder.AppendFormat.

В вашем случае использование строки единого формата для создания результирующей строки полезно, если вы когда-нибудь решите начать локализацию своей программы в других языках - можно извлечь строку форматирования из ресурсов, но с помощью StringBuilder очень сложно сделать код уважать все возможные языки.

На самом деле может быть другая сторона истории, не ориентированная на использование StringBuilder или String.Format. Некоторые люди / команды предпочитают не использовать оператор ? :. Знание, почему вам рекомендовали переписать часть кода, поможет переписать цель.

0 голосов
/ 30 апреля 2011

StringBuilder предпочтительнее, если вы редактируете длинную строку, в этом случае она вам не нужна.

0 голосов
/ 30 апреля 2011

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

public string Format 
{ 
    get 
    { 
        return string.Format("{0}{1}v{1}", LastManStanding ? "FFA " : string.Empty,
                                           m_Teams.PlayersPerTeam); 
    } 
}
...