2014-10-30 1 views
5

프로그래밍을 처음 사용합니다. 대신이의왜 Array.Reverse (myCharArray)가 아닌 myCharArray = myCharArray.Reverse입니까?

string mijnVoornaam = "Remolino"; 
char[] mijnCharArray = mijnVoornaam.ToCharArray(); 
mijnCharArray = mijnCharArray.Reverse(); 

: 당신은 실제로 할 수있는

string mijnVoornaam = "Remolino"; 
char[] mijnCharArray = mijnVoornaam.ToCharArray(); 
Array.Reverse(mijnCharArray); 
+0

또 다른 이유는 제안 된 대안에서 배열의 수정 된 사본이 반환된다는 것입니다 (아마도 원래의 배열을 그대로 둡니다). 이것은 더 비쌀 것입니다. 그러나 'public void Reverse()'메소드가없는 이유는 좋은 질문입니다. – user469104

+0

확장 메서드'Reverse'를 사용할 수도 있습니다. http://msdn.microsoft.com/library/vstudio/bb358497.aspx –

+0

역순으로 ToCharArray를 수행 할 필요가 없으므로 문자열은 이미 IEnumerable입니다. IntelliSense 문자열에 대한 linq 자동 완성을 숨기지 않도록합니다. –

답변

1

당신이 설명 할 수 9. 우리는 이런 일을 할 수없는 이유는 채널에 밥 Tabors 비디오를 통해 C#을 배우고 만약 System.Linq을 사용한다면 그것은 IEnumerable의 확장 메소드입니다.

+0

'char []'는'IEnumerable '입니다. –

3

첫 번째는 char[] 대신 IEnumerable<char>을 반환하는 확장 메서드 Reverse을 사용하기 때문에. 그래서 당신은 ...

mijnCharArray = mijnCharArray.Reverse().ToArray(); 

을 할 수 있지만, 새로운 배열을 생성해야하고 사전에 최종 크기를 알 수 없기 때문에 그 Array.Reverse보다 효율적으로 될 것입니다.

4

둘 다 할 수 있습니다. 이 LINQ을 사용하여 수행 먼저

, 그것은 새로운 시퀀스를 생성합니다

using System.Linq; 

mijnCharArray = mijnCharArray.Reverse().ToArray(); 

두 번째는 현재 위치에서 변경을 수행을 최적화하고 더 효율적입니다 :

Array.Reverse(mijnCharArray); 

선택은 당신입니다, 당신에 따라 달라집니다 사용 시나리오.

1

Reverse()IEnumerable<char>char[]이 아니기 때문에 Reverse 확장 방법을 사용할 수 없습니다. IEnumerable<char>을 배열에 캐스트해야합니다. 그래서 예를 들어 작동합니다

char[] c = mijnVoornaam.Reverse().ToArray(); 

당신은 너무이 확장 방법 stringReverse을 사용할 수

public static class ExtensionMethods 
{ 
    public static string Reverse(this string s) 
    { 
     return string.Concat(s.Reverse()); 
     // or: 
     // return new string(s.Reverse().ToArray()); 
    } 
} 

그럼 그냥 전화 : 사실

string reverse = "name".Reverse(); 
+0

예,'char []'*는'IEnumerable'을 구현합니다 : http://msdn.microsoft.com/en-us/library/system.array.aspx - 이것은 작동합니다 :' "test".ToCharArray() . 역(). ToArray()' –

+0

@ 스탄 바우어 : 네가 옳다. 내 잘못이야. 오류 메시지를 읽지 마십시오. –

+0

새 문자열을 만들고 호출 할 필요가 없습니다. ToArray(); Concat :'string reverseedFirstName = string.Concat (mijnVoornaam.Reverse())'를 사용하십시오. –

3

; 너는 할 수있어.

.Reverse은 LINQ 확장 메서드이며 IEnumerable<T>을 반환하므로 할당이 실패합니다. 그러나이를 수행 한 경우 :

string mijnVoornaam = "Remolino"; 
char[] mijnCharArray = mijnVoornaam.ToCharArray(); 
mijnCharArray = mijnCharArray.Reverse().ToArray(); 

잘 작동합니다. 이 경우 문자가 반전 된 배열이 반환됩니다.

Array.Reverse은 내부 반전을 수행하므로 void을 반환하며 결과를 할당 할 수 없습니다.