Я должен зарегистрироваться string.Endswith("")
от любого из следующих операторов: +,-,*,/
Если у меня есть 20 операторов, я не хочу использовать ||
времена оператора 19.
Если вы используете .NET 3.5, то это довольно просто с помощью LINQ:
string test = "foo+";
string[] operators = { "+", "-", "*", "/" };
bool result = operators.Any(x => test.EndsWith(x));
string s = "Hello World +";
string endChars = "+-*/";
Использование функции:
private bool EndsWithAny(string s, params char[] chars)
{
foreach (char c in chars)
{
if (s.EndsWith(c.ToString()))
return true;
}
return false;
}
bool endsWithAny = EndsWithAny(s, endChars.ToCharArray()); //use an array
bool endsWithAny = EndsWithAny(s, '*', '/', '+', '-'); //or this syntax
Использование LINQ:
bool endsWithAny = endChars.Contains(s.Last());
Использование TrimEnd:
bool endsWithAny = s.TrimEnd(endChars.ToCharArray()).Length < s.Length;
// als possible s.TrimEnd(endChars.ToCharArray()) != s;
Как насчет: -
string input = .....;
string[] matches = { ...... whatever ...... };
foreach (string match in matches)
{
if (input.EndsWith(match))
return true;
}
Я знаю, что избегать LINQ в этом контексте - ужасно старая школа, но однажды вам нужно будет прочитать этот код. Я абсолютно уверен, что LINQ имеет свое применение (возможно, однажды я их найду), но я совершенно уверен, что он не предназначен для замены четырех строк кода выше.
Хотя такой простой пример, вероятно, достаточно хорош, используя ||
, вы также можете использовать для этого Regex:
if (Regex.IsMatch(mystring, @"[-+*/]$")) {
...
}
Если вы действительно хотите, вы можете использовать законы Де Моргана для замены x || y
в вашем коде. Одна из версий гласит:
!(x || y) == !x && !y
Если вы хотите получить тот же результат, нам просто нужно дважды отрицать все выражение:
x || y == !!(x || y) == !(!x && !y)
Не является ли выражение регулярным выражением вариантом
Учитывая полное отсутствие контекста, будет ли полезно это решение, которое хуже, чем использование простого оператора ||
:
Boolean check = false;
if (myString.EndsWith("+"))
check = true;
if (!check && myString.EndsWith("-"))
check = true;
if (!check && myString.EndsWith("/"))
check = true;
etc.
Использование String.IndexOf (String)
:
str.Lenght > 0 ? "+-*/".IndexOf(str[str.Lenght - 1]) != -1 : false
Проверьте последний символ строки, используя String. IndexOfAny(Char[], Int32)
(предполагая, что str
- ваша переменная):
str.IndexOfAny(new char[] {'+', '-', '*', '/'}, str.Length - 1)
Полное выражение:
str.Lenght > 0 ? str.IndexOfAny(new char[] {'+', '-', '*', '/'}, str.Length - 1) != -1 : false