2009-12-28 7 views
39

문자열 []로 변환해야하는 System.Array가 있습니다. 배열을 반복하면서 각 요소의 ToString을 호출하고 문자열 []에 저장하는 것보다 더 나은 방법이 있습니까? 문제는 런타임까지 요소의 유형을 반드시 알 필요가 없다는 것입니다.System.Array를 string []으로 변환하십시오.

+0

을 실행 할 때까지 유형을 모른 채, 당신은 본질적으로 배열을 반복해야합니다 (LINQ 또는 어떤 방법으로 일). – GrayWizardx

+0

(의견에 회신) –

답변

61

LINQ를 사용하는 것은 어떻습니까?

string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray(); 
+0

내 배열에서 .Select 메서드에 액세스 할 수있는 것 같지 않습니다. 내가 놓친 게 있니? – KrisTrip

+3

예,'using.'에'System.Linq'을 추가하십시오 –

+0

C# 3을 사용하고 System.Linq 네임 스페이스를 포함 시켰는지 확인하십시오. – LBushkin

13

그냥 Array입니까? 아니면 (예를 들어) object[]입니까? 그렇다면 :

object[] arr = ... 
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString); 

레퍼런스 유형의 1 차원 배열 (이것은, 예를 들면, 실제로 Foo[]하더라도) object[] 스트 수 있지만 것보다 주 가치 유형 '수 (예 int[] 등) 그러지 마라.

Array a = ... 
object[] arr = (object[]) a; 
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString); 

을하지만 int[] 같은 경우, 수동 루프를해야합니다 : 그래서 당신은 시도 할 수 있습니다.

+0

그것은 단지 배열이며 실제로 값 유형을 포함 할 수 있습니다 (아마). – KrisTrip

+0

@KrisTrip - * 변수 *는 "그냥 배열"일 수 있지만 객체는 그렇지 않습니다. 그것은 명확한 배열 타입을 가지고있다. 또한 "value type 포함"(object []는 할 수 있음)과 "value type 배열"(int []과 같은) 사이에는 큰 차이가 있습니다.이 경우이 차이가 중요합니다. 정확히 ** Array 인스턴스가 무엇인지 명확히 할 수 있습니까? –

+0

ToArray 메서드를 사용하여 배열을 가져옵니다. 런타임까지 모르지만 int [], double [], float [], string [] 또는 Complex [] (사용자 정의 객체) – KrisTrip

4

당신은이 같은 Array.ConvertAll 사용할 수 있습니다 : 이것은 아마 압축 할 수

string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString); 
0

을하지만 수 없다는 제한 주위에 얻을 수는 < 캐스트> 또는 Linq에 선택의 System.Array 유형에 사용하기 목적.

Type myType = MethodToGetMyEnumType(); 
Array enumValuesArray = Enum.GetValues(myType); 
object[] objectValues new object[enumValuesArray.Length]; 
Array.Copy(enumValuesArray, objectValues, enumValuesArray.Length); 

var correctTypeIEnumerable = objectValues.Select(x => Convert.ChangeType(x, t)); 
+0

여전히 일반 객체의 배열입니다. –

0

간단하고 기본적인 접근법;

Array personNames = Array.CreateInstance(typeof (string), 3); 
// or Array personNames = new string[3]; 
personNames.SetValue("Ally", 0); 
personNames.SetValue("Eloise", 1); 
personNames.SetValue("John", 2); 

string[] names = (string[]) personNames; 
// or string[] names = personNames as string[] 

foreach (string name in names) 
    Console.WriteLine(name); 

또는 단지 또 다른 방법

: 당신은 너무 personNames.ToArray를 사용할 수 있습니다

string[] names = (string[]) personNames.ToArray(typeof (string)); 
관련 문제