0

C# の連中は VB について失礼しますが、以下は両方の言語に関連しているはずです。編集:関連していますが、これまでのところ、C# と VB の評価が異なることに誰も気づいていません。質問を調整しました。

以前は、単純な場合

If condition Then
    ThenPart()
Else
    ElsePart()
End If

それを逆の順序に並べ替えたいと思ったので、条件を交換ThenPart()ElsePart()て否定しました (一般的に言えば、 を使用してNot(condition))。あらゆる条件の再配置が可能でした。

最近、優れたNull 条件演算子が導入されました。そして、非対称性が条件になりました。それらと一緒に使用することはできなくなりますNot(condition)。それとも私は何かを見落としていますか?(これが質問です。)

ここで並べ替えて、逆の順序にしThenPart()てみてください 。ElsePart()

Dim list As List(Of Integer) = Nothing
If list?.Count > 0 Then
    ThenPart()
Else
    ElsePart()
End If

トリックは、条件に null 値が表示されることです。もちろん、 を使用して否定することはできませんNot。したがって、自明な否定を使用If Not(list?.Count = 0)することも、 を使用することもできませんIf list?.Count <= 0

唯一の方法は昔ながらIf list Is Nothing OrElse list.Count = 0です。 (正確な否定は を使用します<= 0) (編集: VB にのみ適用されます。VB と C# はここで分岐します。以下を参照してください。)

すべての演算子を否定するのが簡単だった些細な時代はなくなりました (編集: VB のみ)。それとも私は何かを見落としていますか?


追加調査後:

安全に実行できる C# を調べ、!(list?.Count = 0)この発見の後、C# はこの問題から抜け出しました。ここに非対称性はありません。前と同じように否定できます。しかし、私が見る限りnull、Visual Basicでの評価は ANSI SQL に似ているため、VB には非対称性が残っています。null 値は式を介して伝播します。list?.Count > 0したがって、VB では、より自明に否定することはできませんIf list Is Nothing OrElse list.Count = 0。(だから私は「非対称性」という言葉を使いました。) それとも私は何かを見落としているのでしょうか?

4

2 に答える 2

3

すべての演算子を簡単に否定できた些細な時代は終わりました。

何も変更されてconditionいません。最初の例で null を返すことができた場合、単純にifandelseの部分を交換することはできません。nullミックスに追加するNotと、新しい演算子に関係なく単純に使用できなくなります。

これは演算子のせいではありません。null 許容ブール値が対称ではないという事実です。

于 2015-08-10T22:04:20.907 に答える