Вопрос

смотрел на много поста / статьи об использовании IIF (). Все это началось, когда я попытался использовать IIF (), как условный оператор многое в том, как C / C # / C ++ и т. Д.

Что я пытался сделать именно именно в строках этого из следующего поста:

Использование VB.NET IIF Я получаю NullReferenceException >

Однако решение, которое я реализовал, был заимствован из следующего сайта MSDN:

http://msdn.microsoft .com / ru-us / библиотека / 27ydhhhth0d% 28v= vs.80% 29.aspx

Это только после этого я узнал о методе IF () в VB.NET.

Так что в конце я написал функцию, которая возвращает соответствующее значение (которое использовало отражение) для достижения цели. Но этот метод (который я писал) не бросил ни одного исключения. На самом деле я смог проверить нумеративность типа внутри функции.

Function ReturnValue(ByVal MyType As SomeType, ByVal PropertyName as String) As Object
    If MyType Is Nothing Then Return String.Empty
    Dim arrPropInfo As PropertyInfo() = MyType.GetType().GetProperties()
    Return arrPropInfo.Where(Function(x) x.Name = PropertyName).Item(0).GetValue(MyType, Nothing)
End Function
.

Мой вопрос в том, есть что-то написано внутри iif (), чтобы бросить ошибку? - NullReferenceException

If MyType Is Nothing Then Throw New NullReferenceException()
.

или есть что-то намного больше на работе здесь? Так что предположим, что если бы я хотел написать функцию, как IIF, которая бросит ошибку, если что-то в списке аргументов нуль - это вышеупомянутый путь, единственный способ сделать это?

Это было полезно?

Решение

Различие заключается в том, что генеракодицетагкод и генеракодицетагCode являются операторами . ?: не является оператором; Это обычная старая функция. Вы даже можете реализовать это самостоятельно:

Public Shared Function IIf(ByVal Expression As Boolean, ByVal TruePart As Object, ByVal FalsePart As Object) As Object
    If Expression Then Return TruePart Else Return FalsePart
End Function
.

Это означает, что все аргументы, переданные функции, должны быть оценены перед , называется функцией, как и любая другая функция. В IIF нет ничего, что бросает исключение - это просто нормальный процесс оценки аргументов, переданных функции.

Вам также необходимо отметить, что это совершенно нормально, чтобы пройти нулевое / ничего для функции. Вы увидели исключение в вашем коде, потому что выражение, которое вы проходили, имел нулевую ссылку, которая не может быть оценена - скажем, если вы сделали что-то вроде, попробуйте использовать свойство. Длина нулевой строки переменной.

Оператор IF (), с другой стороны, не имеет этой проблемы, потому что именно только что: оператор того, что это оператор, который использует преимущества оценки короткого замыкания, так что только возвращенное выражение должно быть оценивается. Если () также имеет приятное преимущество в том, что он безопасен, хотя вы можете воспроизвести безопасность типа в универсальном IIF (из T) (), а также, если вы хотите.

Другие советы

IIF отличается от C ++:?По крайней мере, по крайней мере, он всегда оценивает оба выражения, поэтому вы не можете сделать такие вещи, как IIF(X is nothing,DefaultValue,X.Value).Это бросит нулевой контроль исключения, потому что в случае x это ничего, он все еще оценивает x.value.

IIF работает так, как это делает, потому что это функция, а не оператор

Вы не предоставили код для того, как вы использовали IIF, так что я просто догадываюсь.То, что я только что сказал, самый первый комментарий от ссылки, которую вы предоставили MSDN, поэтому, вероятно, вы уже знали, что это не ваш вопрос.

Если ваш вопрос действительно то, что вы хотите бросить исключение, вы должны использовать код, который у вас выше, но бросает и ArgumentNullexception вместо этого, чтобы вы могли указать, какой аргумент был нулевым.

Вы можете добавить дополнительный Byref аргумент, чтобы указать, если в функции произошло исключение.Таким образом, мы можем устранить необходимость, чтобы поймать любое исключение, поднятое в функции.Конечно, вам нужно добавить попробовать ... CALL ELACK в этой функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top