.NET 2.0에서 List <int>를 List <string>으로 캐스팅


97

당신은 캐스팅 수 List<int>List<string>어떻게 든?

나는 내가 반복하고 .ToString () 일을 할 수 있다는 것을 알고 있지만 캐스트는 굉장 할 것입니다.

나는 C # 2.0 (그래서 LINQ 없음 )에 있습니다.

답변:


151

.NET 2.0에는 ConvertAll변환기 함수를 전달할 수 있는 방법이 있습니다.

List<int>    l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });

117

2010 년 업데이트

List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());

6
감사! 이것은 저에게 많은 시간을 절약했습니다
Steve French

2
아니요, 람다는 C # 3.0에서 도입되었으므로 2.0에서는 작동하지 않습니다.
Luke

적어도 .NET 3.0이 설치되어 있으면 VS2008 및 .NET 2.0에서 작동한다는 것을 알았습니다. 참조 stackoverflow.com/questions/3341846/...
igelineau

1
사람들은 .NET 버전과 C # 버전을 구별해야합니다. 화살표 x => x.ToString()delegate(int x) { return x.ToString(); }이 경우 와 동일한 종류의 IL로 컴파일 되기 때문에 중요한 것은 무엇을 알고있는 C # 컴파일러 (C # 버전)를 갖는 것 =>입니다. 프레임 워크 및 런타임 (.NET 버전)에는이를위한 특별한 기능이 필요하지 않으므로 여기에서는 .NET 2.0이 좋습니다.
Jeppe Stig Nielsen

당신이 버릴 수 있다는 <string>것이 밝혀졌지만 여전히 작동합니다. 그냥 만들기l1.ConvertAll(x => x.ToString());
ᴍᴀᴛᴛ을 ʙᴀᴋᴇʀ

8

C # 2.0이 할 수 List<T>.Convert있습니까? 그렇다면 대리자와 함께 사용하는 것이 최선의 추측이라고 생각합니다.

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });

그 라인을 따라 뭔가.


Glenn의 대답을 찬성하십시오. 아마도 올바른 코드 일 것입니다 ;-)


6

당신이 사용할 수있는:

List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();

5

명시 적 또는 암시 적 캐스트가 문자열로 INT에서 존재하지 않는로 직접 캐스팅에 당신은 것, 할 수 없을 것이다 같은로 .toString ()를 포함하는 방법으로 : -

foreach (int i in intList) stringList.Add(i.ToString());

편집 -또는 다른 사람들이 다소 훌륭하게 지적했듯이 intList.ConvertAll (delegate (int i) {return i.ToString ();});을 사용하십시오. 그러나 분명히 .ToString ()을 사용해야하며 변환입니다. 캐스트.


3
제네릭 유형간에 캐스트가 존재하는 것은 프로젝션간에 캐스트하는 기능과 관련이 없습니다. IE는 경우에도 int암시 적으로 또는 명시 적으로 전환했다하는 string, 즉 그 의미하지는 않습니다 List<int>에 대한 암시 적 또는 명시 적 변환이 있습니다 List<string>.
Adam Robinson

1

새 목록을 작성해야합니다. 의 기본 비트 표현 List<int>List<string>완전히 호환되지 않습니다 - 64 비트 플랫폼에서, 예를 들어, 개별 구성원도 같은 크기되지 않습니다.

이론적 List<string>으로 a를 a 로 취급하는 것이 가능합니다. 이것은 List<object>공분산과 반공 변성의 흥미 진진한 세계로 안내하며 현재 C # 또는 VB.NET에서 지원되지 않습니다.


@Curt :> 이론적으로는 List <string>을 List <object>로 취급 할 수 있습니다 .-- > 이것은 공분산과 반공 분산의 흥미로운 세계로 여러분을 안내하며>는 현재 C # 또는> VB에서 지원하지 않습니다. NET C # 및 .NET은 실제로 공분산을 지원합니다. 제네릭은 아닙니다.
Christian Hagelid

1

result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()

매개 변수 결과 및 listOfInt를 매개 변수로 바꿉니다.


나를 위해 올바르게 작동했습니다 result = listOfInt.Select (i => i.ToString ()). ToList ();
Sharunas Bielskis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.