質問

iif()を使用することについてのたくさんの投稿/記事を見ていました。 C / C#/ C ++などのお気字では、条件付き演算子のようにiif()を使用しようとしたときに開始されました。

私が正確にやろうとしたのは、次の投稿のこれの行だけでした:

NullReferenceException

しかし、私が実施していた解決策は、次のMSDNサイトから借用されています。

http://msdn.microsoft. .com / ja-us / library / 27ydhh0d%28V= VS.80%29.ASPX

その後、vb.netのif()メソッドについて学んだ後の唯一の

SO ENDでは、目的を達成するために適切な値(反射を使用した)を返す関数を書いていました。しかし、その方法(私が書いた)は例外を捨てませんでした。実際、私は関数内のタイプのヌル性をチェックすることができました。

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のような関数を書いたかったら、引数リストの何かがnullの場合はエラーをスローしますか?

役に立ちましたか?

解決

区別は、?:If()演算子であることです。 IIf()はオペレーターではありません。それは普通の古い機能です。あなたも自分自身を実装することさえできます:

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()内部は何もありません - 関数に渡された引数を評価する通常のプロセスです。

関数にnullを渡して完全に大丈夫であることに注意する必要があります。あなたが渡された式が評価されなかったNULLの参照を持っていたのであなたはあなたのコードの例外を見ました - null string変数の.lengthプロパティを使用してください。

if()演算子は、それがその問題点だけであるため、この問題はありません。また、短絡評価を利用するオペレータであるため、返信式のみが必要な場合があります。評価されました。 if()も、タイプセーフであることの良い利点を持っていますが、(T)(of t)関数(T)()関数も望んでいれば、汎用のIIFでのタイプ安全性も複製できます。

他のヒント

iifはC ++とは異なります:?少なくとも1つの重要な方法で、それは常に両方の式を評価して、IIF(X is nothing,DefaultValue,X.Value)のようなものをすることができません。ケースXの場合はX.Valueを評価するのは常に評価されているため、NULLの参照例外をスローします。

iifは、オペレータではなく機能があるために動作します。

あなたがiifを使っていた方法のためのコードを提供していないので、私はただ推測しています。私が言ったのは、あなたがMSDNに提供されたリンクからの最初のコメントであるので、あなたがすでにこれを知っていたか、これはあなたの質問ではありません。

あなたの質問が例外をスローしたい場合は、上記のコードを使用する必要がありますが、 ArgumentNullexception 代わりに、どの引数がNULLであるかを指定できます。

関数内で例外が発生したかどうかを示すために、追加のbyref引数を追加できます。このようにして、関数で発生した例外をキャッチする必要性を排除できます。もちろん、Try ... Catch文をその機能で追加する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top