这里有没有人使用VB.NET并且强烈偏好或反对使用IsNothing而不是Is Nothing(例如,If IsNothing(anObject)或If anObject Is Nothing...)?如果是这样,为什么?
编辑:如果你认为它们都是同样可以接受的,你认为最好选择一个并坚持下去,还是可以混合它们?
在VB.NET中,有没有办法将DateTime变量设置为"未设置"?为什么它可以设置DateTime到Nothing,但没有能够检查它是否是Nothing?例如:
Dim d As DateTime = Nothing
Dim boolNotSet As Boolean = d Is Nothing
Run Code Online (Sandbox Code Playgroud)
第二个语句抛出此错误:
'Is' operator does not accept operands of type 'Date'. Operands must be reference or
nullable types.
Run Code Online (Sandbox Code Playgroud) 我在Classic ASP页面中有以下VBScript:
function getMagicLink(fromWhere, provider)
dim url
url = "magic.asp?fromwhere=" & fromWhere
If Not provider is Nothing Then ' Error occurs here
url = url & "&provider=" & provider
End if
getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>"
end function
Run Code Online (Sandbox Code Playgroud)
我不断在行上写一个"Object Required"错误消息If Not provider Is Nothing Then.
值为NULL,或者它不是NULL,为什么我会收到此错误?
编辑:当我调用对象时,我传入NULL,或者传入一个字符串.
为什么第一个if语句评估为true?我知道如果我使用"是"而不是"="那么它将不会评估为真.如果我将String.Empty替换为"Foo",则它不会评估为true.String.Empty和"Foo"都有相同类型的String,那么为什么一个评估为true而另一个不评估?
//this evaluates to true
If Nothing = String.Empty Then
End If
//this evaluates to false
If Nothing = "Foo" Then
End If
Run Code Online (Sandbox Code Playgroud) 我遇到了这个,并想知道是否有人可以解释为什么这在VB.NET中工作,我希望它会失败,就像在C#中一样
//The C# Version
struct Person {
public string name;
}
...
Person someone = null; //Nope! Can't do that!!
Person? someoneElse = null; //No problem, just like expected
Run Code Online (Sandbox Code Playgroud)
但是在VB.NET中...
Structure Person
Public name As String
End Structure
...
Dim someone As Person = Nothing 'Wha? this is okay?
Run Code Online (Sandbox Code Playgroud)
没有什么不同于null(Nothing!= null - LOL?),或者这只是处理两种语言之间相同情况的不同方式?
为什么或两者之间的处理方式不同,这使得一个可以在一个,而不是另一个?
[更新]
鉴于一些评论,我更多地搞砸了......如果你想在VB.NET中允许某些东西为null,那么好像你真的必须使用Nullable ...例如...
'This is false - It is still a person'
Dim someone As Person = Nothing
Dim isSomeoneNull As Boolean = someone.Equals(Nothing) …Run Code Online (Sandbox Code Playgroud) 我知道这是一个愚蠢的问题,我想之前一定有人问过.但是我无法找到问题的答案.
下面是一些示例代码(当然不会编译)来概述我的问题:
class test
{
int[] val1;
string val2;
static bool somefunction(test x, test y)
{
dosomestuff()
test result;
while(result is nothing)
{
if(somecondition){result=new test(something);}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题在于以下几行:
while(result is nothing)
Run Code Online (Sandbox Code Playgroud)
这是VB的语法,当然这不是C#编译器所接受的.有人能告诉我如何解决这个问题吗?
IfVBA应用程序中有一个条件如下所示:
If Not My_Object Is Nothing Then
My_Object.Compute
Run Code Online (Sandbox Code Playgroud)
当代码在调试模式下运行时,我发现If即使My_Object具有"无变量" ,条件也会返回true .
有人可以解释一下吗?我想My_Object.Compute只在My_Object存在时执行.
scala类型Nothing表示(据我所知)类型层次结构的底部,也用符号denoted表示.也就是说,Nothing是任何给定类型的子类型.James Iry对我们这些没有理论背景理论背景的人解释了对Nothing类型的要求!
所以我的问题是,如果Nothing是每种类型的子类型,为什么我不能调用任何类型的方法Nothing?显然,我无法实例化Nothing但为什么不进行以下编译?
var n: Nothing = _
def main(args: Array[String]) {
println(n.length) //compile error: value length is not a member of Nothing
}
Run Code Online (Sandbox Code Playgroud)
当然,Nothing这个子类型String应该可以吗?请注意,以下编译就好了!
var n: Nothing = _
def foo(s: String) : Int = s.length
def main(args: Array[String]) {
println(foo(n))
}
Run Code Online (Sandbox Code Playgroud)
同样如下:
def main(args: Array[String]) {
println(n.asInstanceOf[String].length)
}
Run Code Online (Sandbox Code Playgroud) 我们来定义这个函数:
Public Function Test(ByVal value As Boolean)
Return "blabla" + If(value = Nothing, "", If(value, "1", "0"))
End Function
Run Code Online (Sandbox Code Playgroud)
我希望它做到以下几点:
Test(True) -> "blabla1",Test(False) -> "blabla0",Test(Nothing) -> "blabla".
问题是Test(Nothing)返回"blabla0".
我研究了VB.NET中C#的default关键字等价,并遇到了这个问题.
然后我好奇.一些背景 - 我正在解析一个excel电子表格,其中许多列可以为null,并且我0和整数列之间肯定存在差异null.
我写了一个小解析方法:
Function Test(ByVal i As String) As Nullable(Of Integer)
Dim j As Integer
If Integer.TryParse(i, j) Then
Return j
Else
Return Nothing
End If
End Function
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.但是在这里,Integer如果我想要,我可以回复:
Function Test(ByVal i As String) As Nullable(Of Integer)
Return 2 'or Return Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
我也可以参加C#:
static void Main(string[] args)
{
int? j = Test("1");
}
public static int? Test(string i)
{
return 2; //or …Run Code Online (Sandbox Code Playgroud)