2014-12-23 3 views
1

enter image description here 약간 바보 같은 느낌입니다. 어쩌면 내가 모르는 뭔가가있어,하지만 예상대로 다음과 같은 간단한 통화 작업하지 않는 이유 :string.Join()이 예상대로 작동하지 않습니다.

String.Join(" ", "CSharp".ToCharArray()) 

당신은 "C의 S h를 A부터 R P는"복귀 기대하지만, 흥미롭게는 "CSHARP는"반환합니다. 또한, 다음 호출이 반환 올바른 결과 : C#에서

String.Join(" ", "CSharp".ToCharArray().ToList()) 
+3

첫 번째 줄은 나를 위해 예상대로 작동합니다 (Console.WriteLine, MessageBox.Show 및 중단 점 배치 및 결과 검사). 그 값을 어떻게보고 있니? –

+0

그냥 내 컴퓨터에서 실행하고 제대로 작동합니다. 콘솔, MessageBox 및 출력 창 내부. –

+0

메시지 상자와 QuickWatch 창. – dotNET

답변

1

다음 반환 사실이

var result = String.Join(" ", "CSharp".ToCharArray()) == String.Join(" ", "CSharp".ToCharArray().ToList()); 

이 반환 거짓 vb.net에서이

Dim result = String.Join(" ", "CSharp".ToCharArray()) = String.Join(" ", "CSharp".ToCharArray().ToList()) 

이 글은 String.Join(" ", "CSharp".ToCharArray()) 보인다 vb.net 사용 중

자사가 VB.net에 대한 "CSharp".ToCharArray() 1에 하나의 문자열을 String.Join(" ", "CSharp".ToCharArray())

IL_0001: ldstr  " " 
IL_0006: ldc.i4.1  
IL_0007: newarr  System.String 
IL_000C: stloc.1  // VB$t_array$S0 
IL_000D: ldloc.1  // VB$t_array$S0 
IL_000E: ldc.i4.0  
IL_000F: ldstr  "CSharp" 
IL_0014: callvirt System.String.ToCharArray 
IL_0019: newobj  System.String..ctor 
IL_001E: nop   
IL_001F: stelem.ref 
IL_0020: nop   
IL_0021: ldloc.1  // VB$t_array$S0 
IL_0022: call  System.String.Join 
IL_0027: stloc.0  // result 

IL를


IL 변환 즉 691,363,210

Shared Function Join (separator As String, ParamArray value As String()) 

Visual Basic의이 휘말리고있다

IL_0001: ldstr  " " 
IL_0006: ldstr  "CSharp" 
IL_000B: callvirt System.String.ToCharArray 
IL_0010: call  System.String.Join 
IL_0015: stloc.0  // result 
+0

테스트하고 확인해 주셔서 감사합니다. 그러나 이것이 * 대답 *이어야합니까? – dotNET

+0

네 말이 맞아 보인다. VB.NET은 문자 배열을 암시 적으로 문자열로 변환합니다. 방금 한 문자열 매개 변수로 더미 메서드를 만들고 char 배열을 전달했습니다. 행복하게 받아 들였습니다. 이상하게도 이상하게 말하십시오. 특히'Option Strict ON '을 설정했을 때. – dotNET

1

C# String.Join(" ", "CSharp".ToCharArray()) 실제로 사용할 매개 변수.

VB에서 Char()은 실질적으로 String과 동일합니다. 예를이 코드를 가지고 :

Module Module1 

    Sub Test(s As String) 
     Console.WriteLine(s) 
    End Sub 

    Sub Main() 
     Dim foo As Char() = "CSharp".ToCharArray() 
     Dim foo2 As String = "CSharp" 

     Test(foo) 
     Test(foo2) 

     Dim equal As Boolean = foo = foo2 
     Console.WriteLine(equal) 
    End Sub 
End Module 

Visual Basic에서이 Char() 문자열과 같은 방법으로 전달 될 수 있습니다. 틀린 매개 변수를 사용하고 있기 때문에 귀하의 String.Join에서 벗어나고 있습니다. Char() 대신 List(Of T)을 사용하려고합니다.

실제로는 String.Join(String, Char()) 과부하가 없습니다. Join(Of T)이 있습니다. 그러나 컴파일러에서 실제로 T을 설정하도록 할 수는 없습니다.

관련 문제