Комментарий праматерии


private string FormatComments(string comments)
{
        //If comments has no space and inserted as a single line then following code will break
        //the comments into multiple lines.
        StringBuilder sb = new StringBuilder();
        int c = 65;
        int l = comments.Length;
        if (l < c)
            return comments;

        int r = l % c;
        int lines = (l - r) / c;

        if (lines == 0)
            return comments;

        int index = 0;
        for (int i = 0; i < lines; i++)
        {
            if (index > comments.Length)
                break;

            string indexVal = comments[index + c].ToString();

            sb = sb.AppendLine(comments.Substring(index, c) + (indexVal == " " ? "" : "- "));
            index = index + c;
        }
        if(r > 0)
            sb = sb.AppendLine(comments.Substring(index, r));

    return sb.ToString();
}

 

private void SaveValuesInViewState()
{
    string[] roomStr = this.RoomsString.Split('~');
    List<Room> rooms = new List<Room>();
    Room room = null;
    foreach (string str in roomStr)
    {
        room = new Room();
        string[] vals = str.Split('|');
        // 
        room.NoOfRooms = Convert.ToInt32(vals[0]);
        room.Type = (RoomType)Enum.Parse(typeof(RoomType), vals[1]);
        room.NumberOfCots = Convert.ToInt32(vals[2]);
        string[] childInfo = vals[3].Split('^');
        if (Convert.ToInt32(childInfo[0]) > 0)
        {
        foreach (string age in childInfo[1].Split(','))
        {
            room.ChildrenAges.Add(Convert.ToInt32(age));
        }
        }
        rooms.Add(room);
    }
    this.Rooms = rooms;
}


550
4
задан 16 мая 2011 в 05:05 Источник Поделиться
Комментарии
4 ответа

1) Вы вводите слишком много переменных, понимание кода, как правило, менее легко, более переменные (переменные бесполезно) у вас есть и более изменчивый они. В первом способе я хотел бы удалить л и Р переменных. Вместо Л вы можете просто использовать комментарии.Длина и р не нужна (см. Следующий пункт). Я бы также удалить строки и я итератор, указатель можно использовать вместо:

for (int index = 0 ; index <= comments.Length ; index += c)     {    }

2) следующее условие, кажется, бесполезно, я не могу представить любые разумные значения для комментариев.Длина и с чего бы это условие, чтобы быть правдой , учитывая, что мы уже проверили, что Л >= С:

    int r = l % c;
int lines = (l - r) / c;

if (lines == 0)
return comments;

3) Использовать менее crypty имена для переменных. Мы не будем делать математику здесь. Почему с? Я предполагаю, что это возможно, но мне не нравится.

4) Почему строка здесь? Это, безусловно, голец:

string indexVal = comments[index + c].ToString();  

5) не вводить номер переменной в второй способ вне петли. Он используется только внутри, так что это должно быть определено здесь.

6) Вы можете использовать формат перемудрил в номерах в второй способ, особенно вокруг детского возраста. Прямо сейчас у вас есть что-то вроде этого: 5/1/3/0~5/1/3/2^8,10. У вас есть 4 различных сепараторов, но я думаю, ^ могут быть безопасно удалены. Просто положить туда возрастов Если у вас возникли или оставить пустым, у вас нет детей. Вы должны быть наверняка смогла разобрать это: 5/1/3|~5/1/3/8,10.

8
ответ дан 16 мая 2011 в 07:05 Источник Поделиться

Использование строчной буквы "Эл" в качестве идентификатора является плохой практикой. Это легко перепутать его с буквальным 1 во многих шрифтов.

5
ответ дан 16 мая 2011 в 04:05 Источник Поделиться

Я согласен со всеми комментариями выложили до сих пор, но никто не имеет явного имя магическое число 65, на который ссылается "с". Не используйте магические числа, дано достаточно времени, они могут укусить вас в задницу!!

Лучше передайте эти типы ограничений. Так что я бы рефакторинг кода, чтобы быть:

private string FormatComments(string comments, int characterLimit) { ... } 

или сделать его членом класса, который я думаю, что лучше:

private string FormatComments(string comments) 
{
...

if( comments.length < this.CharacterLimit )
return comments;

int overflow = comments.length % this.CharacterLimit;
int lines = (comment.length - overflow) / this.CharacterLimit;

...etc...
}

Наконец, снова-только, чтобы вновь, не пользуйтесь одной буквы имена переменных, если это не я, J, к, Н или X, или, если свои функции менее 3 строк. Никогда не используйте 'L' для переменной имя, идти вперед и заклинание 'лен' если вы сохраняете длину.

Помните, вы пишете код для других программистов. Кстати, считать себя "другими программистами группы", потому что через год, когда вы отлаживаете свой старый код вы сможете оценить, что вам понадобилось времени, чтобы писать читабельный код; не принимайте горячие. Проверить http://cleancoders.com для советы и идей.

3
ответ дан 18 мая 2011 в 02:05 Источник Поделиться

Как отметили другие, большие вещи:


  • Попробуйте использовать более описательные имена для ваших переменных (MaxLineLength, комментарии.Длина, charsOnLastLineи т. д.)

  • Сделать с постоянный (константный инт MaxLineLength = 65), класса переменной или аргумента метода.

Я бы переехала проверьте новое окно инструментов(); вниз близко к для петли. Если л < С (или даже строки == 0 почему-то), то вы потратили создание класса StringBuilder без причины.

Вам не нужно назначать ШБ обратно в СБ. Вы можете просто сделать со.AppendLine(...);. То StringBuilder является изменяемый объект, и каких-либо операций (например, AppendLine) изменить состояние класса StringBuilder. Причина, почему вы должны делать вещи, как stringVar = stringVar + "бар" происходит потому, что строка является неизменным, а все операции, создавать новые строки, потому что исходная строка не может быть изменена.

Нет необходимости конвертировать indexVal в строку.

char indexVal = comments[index + MaxLineLength];
sb = sb.AppendLine(comments.Substring(index, MaxLineLength) + (indexVal == ' ' ? "" : "- "));

0
ответ дан 21 мая 2011 в 10:05 Источник Поделиться