【问题标题】:How is this VB.NET code evaluated?如何评估此 VB.NET 代码?
【发布时间】:2015-03-11 10:37:34
【问题描述】:

我正在进行从 VB.NET 到 C# 的代码转换。我发现了这段代码,我正试图绕开它,但我不知道它是如何评估的:

If eToken.ToLower = False Then _
    Throw New Exception("An eToken is required for this kind of VPN-Permission.)

我的问题是字符串 eToken.ToLower 和布尔值 False 之间的比较。

我尝试使用转换器,结果如下(这不是 C# 中的有效语句,因为您无法将 stringbool 进行比较):

if (eToken.ToLower() == false) {
    throw new Exception("An eToken is required for this kind of VPN-Permission.");
}

【问题讨论】:

  • 选项是否严格关闭?
  • 它可能会进行隐式转换/转换。例如,如果 eToken == "True" 它不会在我的测试中引发异常。
  • 是的,实际上。这是给Microsoft.VisualBasic.CompilerServices.Conversions.ToBoolean(String Value)的电话。
  • @DanielA.White 是的,它已关闭
  • 您无法在 VB.NET 中使用 Option Strict On 将字符串与布尔值进行比较。

标签: c# vb.net string boolean comparison


【解决方案1】:

我编译了它并反编译了IL;在 C# 中是:

string eToken = "abc"; // from: Dim eToken As String = "abc" in my code 
if (!Conversions.ToBoolean(eToken.ToLower()))
{
    throw new Exception("An eToken is required for this kind of VPN-Permission.");
}

所以这就是你的答案:它使用Conversions.ToBoolean(其中ConversionsMicrosoft.VisualBasic.CompilerServices.ConversionsMicrosoft.VisualBasic.dll

【讨论】:

  • 我将添加对 Microsoft.VisualBasic.dll 的引用(我正在尝试避免使用它),但感谢您指出。我可以从中提取代码。
  • 它最终会返回CBool(eToken)。我认为 C# 等价物是 String.IsNullOrEmpty(eToken)
  • @MoslemBenDhaou 很好,它运行显示的内容;如果CBool(foo) 等价于Conversions.ToBoolean(foo),那么:当然。不,这与string.IsNullOrEmpty相同 - 它检查文字 "True" / "False" 字符串:pastie.org/9829529
  • System.Convert.ToBoolean 是一个很好的替代品(正如 Siva 所指出的)——大多数人都不想使用 C# 中的 Micorosoft.VisualBasic.CompilerServices.Conversions.ToBoolean,尤其是在转换时。 ToBoolean 非常接近。
【解决方案2】:

您可以进行类型转换,假设 eToken 的值为“true”/“false”:

if (Convert.ToBoolean(eToken.ToLower())==false)
    throw new Exception("An eToken is required for this kind of VPN-Permission.");
}

【讨论】:

  • Convert.ToBoolean(eToken.ToLower()==false)还有什么作用?你的意思是Convert.ToBoolean(eToken.ToLower())==false
  • @SriramSakthivel 感谢您指出这一点,更新了我的答案。
猜你喜欢
  • 2012-02-10
  • 2011-01-25
  • 2018-11-05
  • 2010-09-05
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多