Refactor бірнеше 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. com/en-us/library/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() жолының ұзындығын ұзындыққа дейін арттырады. Тігінен өсуден бастап, оны қолданған кезде көлденеңге дейін төмендетілетін болады. Бар болғаны.
қосылды автор Zenwalker, көзі
Сезімтал көрінеді. Спасибо :)
қосылды автор Zenwalker, көзі
@zenwalker: бірнеше AppnedFormat() қоңырауларын пайдалануға болады
қосылды автор sll, көзі
AppendFormat пайдаланыңыз және оларды тақырыптық түрде біріктіріңіз. Бір жолғы алып тастауға арналған 3 жол IMHO exageration болып табылады
қосылды автор 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 сызықтарының саны бірдей.
қосылды автор 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
қосылды
Мен бұл туралы ойладым, бірақ мәселе - әр өзгерістерді жасау керек болған сайын, бұл үлкен кедергілерді толық қарау керек. Негізінде, сызықтарды қосу санын азайтуды көздеп отырмын.
қосылды автор Zenwalker, көзі