protected override Boolean IsValid(String propertyValue)
{
return !String.IsNullOrEmpty(propertyValue) && propertyValue.Trim().Length > 0;
}
Этот метод проверки на С# делает то, что я хочу, но я не знал, что вы можете использовать выражение short-circuiting следующим образом.
Если propertyValue имеет значение NULL, выполнение не требует выполнения второй части выражения для получения логического результата, и если да, то почему вторая часть не выбрасывает исключение null ref для Trim().Length > 0?
Я предполагаю, что вторая часть оценивает значение false или null, но мне любопытно узнать, что здесь происходит.
Извините, если мне не хватает чего-то действительно очевидного, пожалуйста, просветите меня.
Бог - мне не хватало чего-то очевидного, что идиот! - общий пробел в том, что, когда первая часть ложна, вторая часть не имеет значения, и я даже НЕ ЗНАЮ, что это было короткоживущим - извините для того, чтобы тратить время на людей, что смайлик для смущения?
Добавлен еще один тег, отражающий мое затруднение при наборе текста перед тем, как подумать.
Это то, что делает короткое замыкание. Когда у вас
e1 && e2
и e1 оценивается как false, e2 вообще не оценивается.
(И для
e1 || e2
если e1 истинно, e2 вообще не оценивается.)
Это важно понять в случае, когда e2 имеет "эффекты" (делает I/O, генерирует исключение,...), поскольку короткое замыкание дает разную семантику программы, чем полная оценка.
Для того, чтобы соединение было истинным, оба его компонента должны быть истинными. Из-за этого определения и потому, что С# сначала оценивает левую конъюнкцию, если левая конъюнкта принимает значение false, тогда ответ уже неверен, а С# не нужно оценивать правильную конъюнкцию.
Это происходит из-за && Оператор
Оператор условного-AND (& &) выполняет логическое-AND своих операндов bool, но при необходимости оценивает его второй операнд.
from MSDN
Хорошая возможность узнать о:)
Если у вас
A AND B
если A является ложным, A и B всегда будут оцениваться как false, поэтому не имеет значения, что такое B.
Это то, что означает короткое замыкание. Когда первый операнд дает false, вторая часть не нуждается в оценке, потому что в любом случае результат будет ложным.
Существует добавление (& &). Поэтому, когда первая часть ложна, ей не нужно оценивать вторую часть.
Это намного лучше, чем старые VB 6 дней, когда это утверждение привело бы к исключению с нулевой ссылкой.