Tôi có một System.Array mà tôi cần phải chuyển đổi thành chuỗi []. Có cách nào tốt hơn để làm điều này hơn là chỉ lặp qua mảng, gọi ToString trên mỗi phần tử, và lưu vào một chuỗi []? Vấn đề là tôi không nhất thiết phải biết loại phần tử cho đến khi chạy.Chuyển đổi System.Array thành chuỗi []
Trả lời
Làm thế nào để sử dụng LINQ?
string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
Chỉ là Array
? Hoặc là nó (ví dụ) object[]
? Nếu vậy:
object[] arr = ...
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
Lưu ý hơn bất kỳ 1-d mảng tham chiếu-loại nên bột nhôm để object[]
(ngay cả khi nó thực sự là, ví dụ, Foo[]
), nhưng giá trị các loại (như int[]
) có thể' t. Vì vậy, bạn có thể thử:
Array a = ...
object[] arr = (object[]) a;
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
Nhưng nếu nó giống như int[]
, bạn sẽ phải lặp lại theo cách thủ công.
Nó chỉ là Mảng và nó thực sự có thể chứa các loại giá trị (có thể sẽ). – KrisTrip
@KrisTrip - biến * có thể là "chỉ mảng", nhưng đối tượng sẽ không được; nó có một loại mảng nhất định. Ngoài ra còn có sự khác biệt ** lớn ** giữa "chứa các loại giá trị" (mà 'đối tượng []' có thể làm), và "là một mảng kiểu giá trị" (chẳng hạn như 'int []').Sự khác biệt này quan trọng trong trường hợp này. Bạn có thể làm rõ những gì ** chính xác ** dụ 'Array' là? –
Tôi lấy Array bằng cách sử dụng phương thức ToArray. Tôi không biết cho đến khi chạy nhưng nó có thể là int [], double [], float [], string [] hoặc Complex [] (đối tượng do người dùng xác định) – KrisTrip
Bạn có thể sử dụng Array.ConvertAll
, như thế này:
string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);
này có lẽ có thể được nén, nhưng nó được khoảng giới hạn của việc không thể sử dụng Cast <> hoặc LINQ Chọn trên một loại System.Array của vật.
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));
Vẫn là một mảng các đối tượng chung. –
Cách tiếp cận đơn giản và cơ bản;
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);
Hoặc chỉ cần một cách tiếp cận khác: Bạn có thể sử dụng personNames.ToArray
quá:
string[] names = (string[]) personNames.ToArray(typeof (string));
Mà không biết các loại cho đến khi thời gian chạy, bạn về cơ bản cần để lặp qua mảng (có thể là với LINQ hoặc bất cứ phương pháp). – GrayWizardx
(đã trả lời nhận xét) –