없음 = 문자열.비어 있음(왜 이것들이 같습니까?)
첫 번째 if 문이 참으로 평가되는 이유는 무엇입니까?"=" 대신 "is"를 사용하면 true로 평가되지 않습니다.String을 바꾸면요."Foo"가 있는 빈칸은 사실로 평가되지 않습니다.양쪽 문자열.Empty와 "Foo"는 같은 유형의 String을 가지고 있는데, 왜 하나는 true로 평가하고 다른 하나는 true로 평가하지 않습니까?
//this evaluates to true
If Nothing = String.Empty Then
End If
//this evaluates to false
If Nothing = "Foo" Then
End If
유형의 기본값은 VB.net 에 없습니다.언어 사양은 섹션 2.4.7에 나와 있습니다.
특별한 리터럴은 없습니다. 형식이 없으며 형식 매개 변수를 포함하여 형식 시스템의 모든 형식으로 변환할 수 있습니다.특정 유형으로 변환할 경우 해당 유형의 기본값과 동일합니다.
그래서 String에 대해 테스트할 때.비어 있음, 길이가 0인 문자열로 변환되는 것은 없습니다.Is 연산자는 Nothing 및 String에 대한 테스트에 사용해야 합니다.Empty.Equals(Nothing)도 false를 반환합니다.
VB의 특별한 경우입니다.=
그리고.<>
연산자
언어 사양은 섹션 11.14에 명시되어 있습니다.
문자열 비교를 수행할 때 null 참조는 문자열 리터럴 " "와 같습니다.
만약 당신이 더 자세한 사항에 관심이 있다면, 나는 상세한 비교를 작성했습니다.vbNullString
,String.Empty
,""
그리고.Nothing
VB.NET의 경우:
이 항목과 관련하여 SqlParameter의 속성 "value"에 할당하기 위해 "nothing"으로 초기화된 문자열 변수를 사용하면 해당 매개 변수는 무시되고 서버로 전송되는 명령에 포함되지 않으며 누락된 매개 변수 오류가 발생합니다.string.empty를 사용하여 변수를 초기화하면 모든 것이 정상적으로 수행됩니다.
//This doesn't work
Dim myString as String = nothing
mySqlCommand.Parameters.Add("@MyParameter", SqlDbType.Char).Value = myString
//This works
Dim myString as String = string.empty
mySqlCommand.Parameters.Add("@MyParameter", SqlDbType.Char).Value = myString
사용해 보십시오.
Console.WriteLine("Is String.Empty equal to Nothing?: {0}", String.Empty.Equals(Nothing))
그=
연산자는 동일한 유형을 강제하지 않는 반면, 문자열 객체의 방법은 강제합니다.Is
교환입니다.
언급URL : https://stackoverflow.com/questions/2633166/nothing-string-empty-why-are-these-equal
'programing' 카테고리의 다른 글
특정 Git 태그를 복제하는 방법 (0) | 2023.05.26 |
---|---|
Node.js의 Connect, Express 및 "middleware"란 무엇입니까? (0) | 2023.05.21 |
NSURL을 NS 문자열로 변환 (0) | 2023.05.21 |
앱 딜러는 무엇을 위한 것이며 언제 앱을 사용해야 하는지 어떻게 알 수 있습니까? (0) | 2023.05.21 |
LINQ 문에서 익명 유형에 해당하는 VB.NET 구문은 무엇입니까? (0) | 2023.05.21 |