2014-11-28 2 views
-1

Я хочу, чтобы этот код меньшеУсловный оператор неприятности - сделать код меньше

if (char.IsLetter(e.KeyChar) || e.KeyChar == ',' || e.KeyChar == '/' || e.KeyChar == ';' || e.KeyChar == '<' || e.KeyChar == '>') 
     { 
      e.Handled = true; 
     } 

Но я не знаю, как ... Пожалуйста, помогите

Благодарности

+1

Подсказка: '.Contains()' – zerkms

+0

попытайтесь использовать регулярное выражение. –

+1

еще один подсказку [.IndexOf] (http://msdn.microsoft.com/en-us/library/k8b1470s (v = vs.110) .aspx) – bansi

ответ

6

Как кто-то намекнул в комментарий, вы можете использовать Contains.

char[] allowable = new [] { ',', '/', ';', '<', '>' }; 

if (char.IsLetter(e.KeyChar) || allowable.Contains(e.KeyChar)) 
{ 
    e.Handled = true; 
} 

Возможно, вы захотите сделать этот массив static readonly в родительском классе.

Как Деннис отметил в комментарии ниже, хорошая альтернатива всем это может быть:

char[] allowable = new [] { ',', '/', ';', '<', '>' }; 

e.Handled = char.IsLetter(e.KeyChar) || allowable.Contains(e.KeyChar); 

Это определенно короче, но это хорошо, чтобы отметить, что это не совсем синонимы. Но они будут функционально эквивалентны, если у вас нет предшествующих условий, которые устанавливают e.Handled без звонка return.

+5

Или даже короче: 'e.Handled = char.IsLetter (e.KeyChar) || allowable.Contains (e.KeyChar) '. – Dennis

+1

@Dennis True, предполагая, что это (как, вероятно, справедливо) полный пример. Также возможно, что существовали предшествующие условия, которые устанавливали 'e.Handled = true' и по той или иной причине не возвращались. Но да, в значительном большинстве случаев, это было бы предпочтительнее. Хорошая точка зрения. –

+0

Спасибо, что очень много работает: D – Al00X

0

2 линии?

char[] allowableChars = new [] { ',', '/', ';', '<', '>' }; 
e.handled = (char.IsLetter(e.KeyChar) || allowableChars.Contains(e.KeyChar)); 
Смежные вопросы