Рэфактарынг некалькі аператараў StringBuilder.Append

Сёння я ўбачыў гэтую дрэнную структуру кода і з таго часу я пачаў думаць яго вельмі нязручна і страшна глядзець на гэты метад, які мае гэты код. Код выглядае наступным чынам:

StringBuilder body = new StringBuilder();       

            #region General
            body.Append("General information:");
            body.Append('*');
            body.Append('*');
            body.Append("Exception:         ");
            body.Append(m_ExceptionInfo.Exception.GetType().ToString());
            body.Append('*');
            body.Append("Message:           ");
            body.Append(m_ExceptionInfo.Exception.Message);
            body.Append('*');
            body.Append("Method:            ");
            body.Append(m_ExceptionInfo.GetMethodName(m_ExceptionInfo.Exception));
            body.Append('*');
            body.Append("Class:             ");
            body.Append(m_ExceptionInfo.GetClassName(m_ExceptionInfo.Exception));
            body.Append('*');
            body.Append("Assembly:          ");
            body.Append(m_ExceptionInfo.AssemblyName);
            body.Append('*');
            body.Append("App-Domain:        ");
            body.Append(m_ExceptionInfo.AppDomainName);
            body.Append('*');
            body.Append("Source-File:       ");
            body.Append(m_ExceptionInfo.GetFileName(m_ExceptionInfo.Exception));
            body.Append('*');
            body.Append("Line/Row:          ");
            body.Append(
                m_ExceptionInfo.GetFileLineNumber(m_ExceptionInfo.Exception).ToString(currentNumberFormatInfoProvider));

Гэта мы робім, каб наладзіць інфармацыю адлюстроўваецца паведамленні пра памылку вокны ў карыстацкім інтэрфейсе. Так што мы рыхтуем радок з такой шмат інфармацыі. Але мне яе дрэнна сябе адчувае, каб паглядзець на гэты код і не маюць ні найменшага падання, як рэарганізаваць яго.

Любая дапамога вітаецца! дзякуй

2
Калі вам не падабаецца ўсё прабелы: msdn.microsoft. кім/EN-US/бібліятэка/system.string.padright.aspx
дададзена аўтар JP Hellemons, крыніца
Дарэчы: каб прымусіць вас адчуваць сябе менш дрэнна: вы карыстаецеся StringBuilder ! гэта значна лепш, чым радкі па змаўчанні канкатэнацыі.
дададзена аўтар JP Hellemons, крыніца
Што менавіта вас турбуе пра гэта кодзе?
дададзена аўтар sq33G, крыніца
На самай справе вышэй, толькі палова з таго, што я ёсць тут. Метад мае такія заявы, як 50 або каля таго. Я ўяўляю, як нейкі дурны Паннаў напісаў? Ну, хоць ні адзін орган не прасіў мяне, каб выправіць гэта, але я ненавіджу глядзець на яго. Плюс любы невялікая змена, гэта кайф мне цяжка ўважліва паглядзець парадкова. стомна!
дададзена аўтар Zenwalker, крыніца

3 адказы

Выкарыстоўвайце StringBuilder.AppendFormat() метад :

StringBuilder body = new StringBuilder();    
body.AppendFormat("Exception: {0}, Message: {1}{2}Class: {3}, Assembly: {4}{5}", 
                            m_ExceptionInfo.Exception.GetType(),
                            m_ExceptionInfo.Exception.Message,
                            Environment.NewLine,                              
                            m_ExceptionInfo.GetClassName(...),
                            m_ExceptionInfo.AssemblyName,
                            Environment.NewLine);

body.AppendFormat("App-Domain: {0}, Source-File: {1}{2}",
                            m_ExceptionInfo.AppDomainName,
                            m_ExceptionInfo.GetFileName(...),
                            Environment.NewLine);
3
дададзена
Ну я ўжо глядзеў на яе, нават выкарыстоўваючы гэта таксама павялічвае даўжыню ад лініі AppendFormat() да lenghty адзін. З vertial росту яна будзе зведзена да гарызантальнай плоскасці, калі выкарыстоўваецца гэта. Гэта ўсе.
дададзена аўтар Zenwalker, крыніца
Выглядае разумна. дзякуй :)
дададзена аўтар Zenwalker, крыніца
@zenwalker: вы можаце выкарыстоўваць некалькі AppnedFormat() званкі
дададзена аўтар sll, крыніца
Выкарыстоўвайце AppendFormat і аб'яднаць іх тэматычна. 3 лініі для аднаго паведамлення выключэнняў ІМХО перабольшання можна
дададзена аўтар fixagon, крыніца

Чаму б вам не стварыць простую калекцыю радкоў пара, а затым перабіраць іх, каб пабудаваць рэальную радок? напрыклад:

 Dictionary info = new Dictionary();
 info.Add("General information", "*");
 info.Add("Exception", m_ExceptionInfo.Exception.GetType().ToString());
 info.Add("Message",   m_ExceptionInfo.Exception.Message);
 //etc

 StringBuilder body = new StringBuilder();  
 foreach(KeyValuePair stringPair in info)
     body.AppendFormat("{0}:{1, 20}", stringPair.Key, stringPair.Value);
1
дададзена
Няма, значыць удвая менш, і вам не трэба турбавацца аб выраўноўванні
дададзена аўтар GazTheDestroyer, крыніца
Такое ж колькасць Append ліній мы паўтараем на Dictionary.Add заявы.
дададзена аўтар Zenwalker, крыніца

Стварэнне метадаў з паасобнымі асэнсаванымі імёнамі для кожнага біта дадаванага б гэты метад інфармацыі, здаецца, лепш:

private void AppendExceptionMessage(StringBuilder builder)
{
    builder.Append("Message:           ");
    builder.Append(m_ExceptionInfo.Exception.Message);
    builder.Append('*');
}

private void AppendMethodInfo(StringBuilder builder)
{
    builder.Append("Method:            ");
    builder.Append(m_ExceptionInfo.GetMethodName(m_ExceptionInfo.Exception));
    builder.Append('*');
}

body.Append("General information:");
body.Append('*');
body.Append('*');
AppendExceptionMessage(body);
AppendMethodInfo(body);
0
дададзена
Я ўжо думаў пра гэта, але праблема ў тым, што кожны раз, калі я павінен зрабіць некаторыя змены, гэты вялікі беспарадак павінен быць выглядаў Detaily. У асноўным я шукаю, каб паменшыць колькасць Append ліній.
дададзена аўтар Zenwalker, крыніца