我在一些vb.net源代码中看到了这个:
Dim sTest As String = "" & drTest("column")有人告诉我,如果drTest(“sTest”)为nothing,那么列将被赋值为"",因此它实际上是这样做的:
Dim sTest As String = If("",Nothing,drTest("column"))我所展示的第一种方式的缺点是什么?
使用If和IIf有什么区别?
发布于 2011-03-30 05:16:42
虽然@Konrad Rudolph回答了你的具体问题,但我想继续他说的话:
这没有任何意义,甚至不应该编译(或者至少给出一个警告)。您的第一个代码很好-它总是有效的,没有任何缺点。目前还不清楚第二个代码想要实现什么。
他是对的,你甚至不应该做你第二行所建议的事情。要达到您想要的效果,简单的答案是使用TryCast。只有当drTest("column")包含一个值时,才会分配一个非空的字符串值。既然是这样,为什么不这样做呢:
Dim sTest As String = TryCast(drTest("column"), String)这样,如果TryCast成功,您将获得值,否则将获得Nothing。
现在,由于TryCast返回Nothing,并且您的示例显示您希望分配"",因此您可能不想走这条路,因为它可能导致处理String Nothingness vs "“/ String.Empty的失败。如果需要,您可以使用String.IsNullOrEmpty()方法,但这需要您将字符串作为参数传入,而且对我来说,这会使您的代码变得笨拙。或者,您可以像我一样创建自己的StringExtensions模块,并使用扩展来检查虚无和空:
Option Explicit On
Option Strict On
Imports System.Runtime.CompilerServices
Public Module StringExtensions
<Extension()> _
Public Function IsNullOrEmpty(ByVal s As String) As Boolean
Return s Is Nothing OrElse s.Trim.Length.Equals(0)
End Function
<Extension()> _
Public Function IsNotNullOrEmpty(ByVal s As String) As Boolean
Return s IsNot Nothing AndAlso s.Trim.Length > 0
End Function
End Module然后,为了实现针对setting设置""的效果,可以结合使用TryCast和我的StringExtensions方法来完成以下操作:
如果为,则为带有三元的
Dim sColumn1 As String = TryCast(drTest("column1"), String)
Dim sColumn2 As String = TryCast(drTest("column2"), String)
Dim sColumn3 As String = TryCast(drTest("column3"), String)
Dim sTest1 As String = If(sColumn1.IsNotNullOrEmpty, sColumn1, String.Empty)
Dim sTest2 As String = If(sColumn2.IsNotNullOrEmpty, sColumn2, String.Empty)
Dim sTest3 As String = If(sColumn3.IsNotNullOrEmpty, sColumn3, String.Empty)如果为,则不带三元的
Dim sTest1 As String = String.Empty
Dim sTest2 As String = String.Empty
Dim sTest3 As String = String.Empty
Dim sColumn1 As String = TryCast(drTest("column1"), String)
Dim sColumn2 As String = TryCast(drTest("column2"), String)
Dim sColumn3 As String = TryCast(drTest("column3"), String)
If sColumn1.IsNotNullOrEmpty Then sTest1 = sColumn1
If sColumn2.IsNotNullOrEmpty Then sTest2 = sColumn2
If sColumn3.IsNotNullOrEmpty Then sTest3 = sColumn3https://stackoverflow.com/questions/5474228
复制相似问题