Это более общее, чем специфическое для git, но я видел много проектов с сообщениями коммитов типа «bugfix», «fix foo» или «stuff». Не делайте этого, вместо этого используйте осмысленные коммит-сообщения, такие как «component fiz: Fix foo bug [\ n \ nExtra info]» и «Очистка пробелов». Вы будете благодарить себя, когда позже неизбежно посмотрите на свою историю коммитов, и вам не нужно будет говорить «Что, черт возьми, я имел в виду, когда совершал« вещи »?»
Проблема в том, что если работает с логическими значениями.
stringName == "firstName"
возвращает логическое значение.
«lastName»
является строковым литералом.
||
- это сокращенный логический оператор или оператор, который принимает логические значения с обеих сторон.
Другими словами, вы хотите изменить определение ||
, что обычно является плохой идеей .
Теоретически, синтаксический анализатор может сделать вывод о том, что вы имеете в виду ... но это очень быстро становится неоднозначным.
if (stringName == firstName || lastName)
Выглядит нормально, правда? Но что такое lastName?
Что, если бы я сделал это?
const bool lastName = false;
Кроме того, &&
является противоположностью ||
, но stringName == firstName && lastName
не противоречит приведенной выше логике и на самом деле не имеет смысла.
Догадывать компилятор о намерениях программиста, когда код явно неправильный, чтобы исправить это, - действительно, очень плохая идея.
Думаю, ваше предложение запутает правила синтаксического анализа выражений - теперь '==' становится оператором квадрени (?), А не двоичным. Я обнаружил, что мне не хватает оператора IN SQL, и я использовал что-то вроде этого:
if (stringName.In("foo", "bar", "baz"))
{
}
// in an extension method class
public static bool In<T>(this T value, params T[] values)
{
return values.Contains(value);
}
Даже в круглых скобках это не имеет смысла. stringName == ("firstName" || "lastName")
похоже, что вы хотите проверить истинность двух строк, и эти строки всегда будут истинными, а затем сравните этот логический результат с string stringName
.
Если вы добавите круглые скобки вроде этого (stringName == "firstName") || "lastName"
, условие также всегда будет истинным, поскольку "lastName"
всегда истинно независимо от того, равно ли stringName
"firstName"
.
Мне нравится способ Ruby:
["firstName", "lastName"].include? stringName
Вы всегда можете использовать Contains
, как предлагали другие, или написать метод расширения String, где вы могли бы это сделать:
stringName.EqualsOneOf(new[] {"firstName", "lastName"})
Это будет работать, только если оператор || (строка, строка)
вернет .. своего рода набор строк, и у вас есть перегрузка Equals
который взял строку и эту коллекцию строк и подтвердил, что строка находится в коллекции. Похоже, что за очень редко используемой конструкцией проделано много работы.
Тем более, что вы уже можете сделать что-то вроде:
if(new string[]{"firstName","lastName"}.Contains(stringName))
// code
Я считаю, что функция Contains () решает эту проблему, например:
string[] ValidNames = new string[] { "firstName", "lastName"};
if(ValidNames.Contains(stringName))
{
//Do Code
}
Вот почему я всегда делаю это по привычке:
if ((stringName == "firstName") || (stringName == "lastName"))
// Do code
Через некоторое время это становится моей второй натурой.
Причина, по которой они не разрешили такой синтаксис, скорее всего, связана с удобочитаемостью. Если вы впервые смотрите на код, и вы вы не совсем в своем уме, вы можете не сразу увидеть, что сравниваете stringName
с "firstName"
и "lastName"
. Это просто делает ваши намерения более определенными.
С другой стороны, круглые скобки могут решить эту проблему.
Когда FCL содержит все возможности для создания огромного разнообразия ответов, представленных в этом потоке, вам не нужно иметь более гибкий синтаксис C #, потому что удобочитаемость скоро станет особенностью того, как вы создаете ответ среди всего богатства. Большую часть времени он сводится к выбору между вызовами метода и объекта.
Вот пример (просто еще один из многих) возможности найти одну или несколько строк одновременно в массиве строк или применить любые другие критерии вы считаете нужным для этого набора строк. Отступы, интервалы и комментарии кода играют большую роль для понимания этого примера кода, как и любого другого кода.
bool found = Array.Exists(
// array of strings to search
new[] { "c#", ".net", "programming", "design patterns", "work", "play", "bits", "bytes", "break" },
// criteria - can even satisfy multiple conditions simultaneously if desired
str => (str == ".NET" || str == "work") //look for ".NET" or "work"
);
Я бы не возражал против синтаксиса типа SQL:
if(stringName in ("firsName", "lastName"))
{
}