이것에 대한 올바른 구문은 무엇입니까?
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
내가 뭘 망 쳤어? TSource는 무엇을 의미합니까?
답변:
문제는 당신이 전화하고 있다는 것입니다 List<T>.Reverse()
있는 반환 void
.
다음 중 하나를 수행 할 수 있습니다.
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
또는:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
후자는 더 많은 비용이 듭니다. 임의의 값 IEnumerable<T>
을 되돌리려면 모든 데이터를 버퍼링 한 다음 모든 데이터를 생성하는 것이 포함되기 때문입니다. 반면에 List<T>
모든 역방향 "인플레 이스"를 수행 할 수 있습니다. (여기서 차이점 Enumerable.Reverse<T>()
은 List<T>.Reverse()
인스턴스 메서드 대신 확장 메서드를 호출한다는 것 입니다.)
더 효율적이지만 다음을 사용할 수 있습니다.
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
이렇게하면 부적절한 크기의 버퍼가 생성되는 것을 방지 할 수 있습니다. 4 개의 명령문을 사용하는 대신 실제 사용 사례에서 성능 대비 가독성을 비교합니다.
나는이 질문이 꽤 오래되었다는 것을 알고 있지만 내 문자열에 공백이 포함되어 있다는 점을 제외하면 비슷한 문제가 있습니다. 쉼표 이상으로 문자열을 구분하는 방법을 알아야하는 사람들을 위해 :
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions는 공백 문자 일 뿐인 레코드를 제거합니다.