2012-05-24 3 views
2

Я написал этот метод для форматирования Номер счета:Как оптимизировать этот метод FormatAccountNumber?

public static string FormatAccountNumber(string accountNumber) 
{ 
    if (string.IsNullOrEmpty(accountNumber)) 
     return string.Empty; 

    if (accountNumber.Length < 4) 
     return "****"; 
    else 
    { 
     StringBuilder stringBuilder = new StringBuilder(); 
     int starLength = accountNumber.Length - 4; 

     for (int index = 0; index < starLength; index++) 
      stringBuilder.Append("*"); 

     stringBuilder.Append(accountNumber.Substring(accountNumber.Length - 4)); 

     return stringBuilder.ToString(); 
    } 
} 

Может это оптимизированное или он уже оптимизирован за счет использования StringBuilder?

+0

Какую оптимизацию вы ищете и почему? Минимум строки кода, мин. время выполнения, макс. читабельность, соответствие стандартам кодирования, что-то еще? –

+0

@ Даниэль: Минимальное время выполнения. Я не против, если линии не минимальны. –

+1

Вместо цикла 'for' вы можете использовать конструктор строки. 'stringBuilder.Append (новая строка ('*', starLength)) Но время выполнения этого уже будет довольно быстрым. Похоже, вы пытаетесь оптимизировать то, что не нужно оптимизировать. – vcsjones

ответ

3

Метод ниже выполняет то, что вам нужно, легко читается и выполняется в несколько раз быстрее. Тем не менее, если вам не нужно выполнять его тысячу раз, вы хотите увидеть разницу во времени выполнения.

public static string FormatAccountNumber2(string accountNumber) 
    { 
     if (string.IsNullOrEmpty(accountNumber)) 
      return string.Empty; 

     if (accountNumber.Length < 4) 
      return "****"; 

     return new string('*', accountNumber.Length - 4) + 
      accountNumber.Substring(accountNumber.Length - 4); 
    } 
+0

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

+0

Вау, ваш метод на самом деле занял меньше! Благодарю. Я тестировал его на 100000 предметов. Шахта заняла 86 мс. У вас было 29 мс. –

Смежные вопросы