2013-03-09 6 views
0

Есть ли лучший способ написать это в vs2010 C#?Как упростить этот код C#

public bool IsAccept() 
    { 
     //check the status is accept 
     if (Status == null) 
      return false; 
     return Status.ToLower() == "accept"; 
    } 

    public bool IsRefer() 
    { 
     //check the status is refer 
     if (Status == null) 
      return false; 
     return Status.ToLower() == "refer"; 
    } 


    public bool IsAnyReviewState() 
    { 
     if (IsAccept() || IsRefer()) 
      return true; 
     return false; 
    } 

Возможно, упрощенный способ в C# 4, который я все еще изучаю.

+8

Принадлежит http://codereview.stackexchange.com/ – RvdK

+0

Может ли это быть перенесены в codereview.stackexchange.com вместо закрытой? –

ответ

0
public bool IsAccept() 
    { 
     return (Status == null)?false:(Status.ToLower() == "accept"); 
    } 

И так далее ...

1

Как насчет этого?

public bool IsAnyReviewState() 
{ 
    return new [] {"accept", "refer"}.Contains((Status??string.empty).ToString().ToLower()) 
} 
1

вы можете использовать оценку короткого замыкания, чтобы сделать код более точным. КСТАТИ. нет ничего особенного в C# 4.

public bool IsAccept() 
{ 
    //check the status is accept 
    return Status != null && Status.ToLower() == "accept"; 
} 

public bool IsRefer() 
{ 
    //check the status is refer 
    return Status != null && Status.ToLower() == "refer"; 
} 


public bool IsAnyReviewState() 
{ 
    return IsAccept() || IsRefer(); 
} 
1
  1. Для простых аксессоров, как эти, синтаксис недвижимости лучше, чем методы.
  2. Используйте String.Equals или String.IndexOf с StringComparison.OrdinalIgnoreCase вместо того, чтобы делать String.ToLower() ==. Также, если вы абсолютно должны нормализовать строки, используйте String.ToUpperInvariant, поскольку он сохраняет определенную информацию, которая теряется при выполнении ToLowerInvariant, это влияет на нелатинские языки, такие как турецкий, который имеет особое поведение своего I-подобного символа.
  3. Рассмотрите возможность использования String.IsNullOrEmpty
  4. Помните, что логические операторы возвращают булевы значения сами, так что вы можете упростить IsAnyReviewState массивно.

Вот как я бы написать свой код:

public bool IsAccept { 
    get { 
     return String.IsNullOrEmpty(this.Status) ? false : this.Status.Equals("accept", StringComparison.OrdinalIgnoreCase); 
    } 
} 

public bool IsRefer { 
    get { 
     return String.IsNullOrEmpty(this.Status) ? false : this.Status.Equals("refer", StringComparison.OrdinalIgnoreCase); 
    } 
} 

public bool IsAnyReviewState { 
    get { 
     return this.IsAccept || this.IsRefer; 
    } 
} 
1

я хотел бы использовать ternary operators как так:

public bool IsAccept() 
    { 
     //check the status is accept 
     return Status == null ? false : Status.ToLower() == "accept"; 
    } 
0

Лично я предпочитаю использовать string.Equals для сравнения строк. В случае IsAccept(), я хотел бы написать:

public bool IsAccept() 
{ 
    return string.Equals(Status, "accept", StringComparison.InvariantCultureIgnoreCase); 
} 

Это освобождает вас от написания оборонительных null -Проверяет и не требует .ToLower().

Меньше кода: = счастливый кодировщик

редактировать: имеет ли Status свойство нужно быть string? Вы могли бы заменить его для перечисления, может быть?

0

Как сказал RvdK, этот вопрос должен быть на CodeReview. Кроме того, я не уверен, пытаетесь ли вы сделать код более компактным или более читаемым.

Если вы пытаетесь сделать его более читаемым, единственное, что приходит на ум, - это изменить операторы return.

Например, вместо

return Status.ToLower() == "accept"; 

считают

if(Status.ToLower() == "accept") 
     return true; 
    else 
     return false; 
+0

Это зависит от того, что вы считаете читаемым. Я, к примеру, возражаю против этого, поскольку я должен мысленно проверить, верна ли истина в истинном пути, тогда как в короткой нотной форме у меня нет такой дополнительной «нагрузки». –

+0

Основная причина, по которой я предложил то, что я предлагал, было потому, что кто-то, кто не знаком с кодированием, может легко понять, что происходит. Правдоподобно, что кто-то может не понимать, что оператор '==' вернет логическое значение, которое может быть возвращено методом. –

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