我担心这是一个愚蠢的问题,但我必须假设我已经编程了VB.Net太长时间,现在无法弄清楚如何将此C# null coalescing operator转换为VB.Net:
if( Convert.ToBoolean(ViewState[tp.UniqueID + "_Display"] ?? true) == false ){}
我知道IIF-Function,但我不知道如何在这里使用它,如果它给出了正确的结果(在IIF中,两个表达式都在评估中)。请帮助揭开黑暗的光芒。
编辑:如果您想查看此内容的来源:forums.asp.net
在那里,您可以看到生成Option Strict On disallows implicit conversions from 'Object' to 'Boolean'
编译器异常的解决方案。
答案 0 :(得分:5)
你想要If operator(不是IIF功能)。它可以用作?:
条件运算符和来自C#的??
空合并运算符的等价物,具体取决于它是通过3个参数还是2
你真的想要这样的东西:
If Not ViewState[tp.UniqueID + "_Display"] is Nothing AndAlso Not CType(ViewState[tp.UniqueID + "_Display"],Boolean) Then
End If
至少还会让你短路。
答案 1 :(得分:2)
如果你使用vb 9,你可以"if" ternary operator。
答案 2 :(得分:1)
过了一段时间,但我认为这就是你想要的:
CBool(IIf(IsNothing(ViewState(tp.UniqueID + "_Display")), True, False))
Tim(OP)编辑:
这实际上等于C#版本
Not CBool(IIf(IsNothing(ViewState(tp.UniqueID + "_Display")), True, ViewState(tp.UniqueID + "_Display")))
答案 3 :(得分:1)
这应该有效:
If (ViewState(tp.UniqueID + "_Display") IsNot Nothing OrElse Convert.ToBoolean(ViewState(tp.UniqueID + "_Display") = false) Then ... End If
我没有使用IIf运算符来简化:)
答案 4 :(得分:0)
IIF
使用VB
。
IIF(
IIF(Convert.ToBoolean(ViewState[tp.UniqueID + "_Display"] = Nothing,
True,
ViewState[tp.UniqueID + "_Display"]),
Success(),
Failure())
答案 5 :(得分:0)
也许你试图让这个太难了。试试这个:
If ViewState[tp.UniqueID + "_Display"] = True Then ...
请记住,ViewState会返回一个带框的object
,没有什么可以阻止您直接将True
和False
进行比较。当您拥有= True
时,Option Strict Off
是可选的。
可选地
If Object.Equals(ViewState[tp.UniqueID + "_Display"], True) Then
答案 6 :(得分:0)
将String
函数IsNullOrEmpty
与request
对象一起使用。
Dim display As Boolean = False
If String.IsNullOrEmpty(Request.QueryString("UID")) Then
display = Convert.ToBoolean(Request.QueryString("UID"))
End If
答案 7 :(得分:0)
提供的例子很糟糕 - 很糟糕,实际上是可耻的。它实际上有一个调用只能评估两个不同的上下文,以确定一个括号内的区域是执行还是被跳过。
这是逻辑分析,以更好地解释:
ViewState [tp.UniqueID +“_ Display”]将评估为:
如果评估为假,则使用发布的源,空合并操作会短路并强制在“== false”处进行真正的评估。然后执行花括号内容。
如果该评估是其他任何内容,那么评估null将合并为“true”并强制在“== false”处进行错误评估。然后跳过花括号内容。
所以 实际上 编写原始资源的正确且非常简单的方法是:
if( Convert.ToBoolean( ViewState[tp.UniqueID + "_Display"] ) == false) {
// do something
}
值得注意的是,这没有null-coalesce opertation。
其中的问题是,该示例不足以证明使用null-coalesce操作,并且预测需要将操作“转换”为Visual Basic。