将 System.Array 转换为 string[]

发布于 2024-08-16 22:58:06 字数 111 浏览 4 评论 0原文

我有一个 System.Array,需要将其转换为 string[]。有没有比循环遍历数组、对每个元素调用 ToString 并保存到 string[] 更好的方法?问题是我在运行时之前不一定知道元素的类型。

I have a System.Array that I need to convert to string[]. Is there a better way to do this than just looping through the array, calling ToString on each element, and saving to a string[]? The problem is I don't necessarily know the type of the elements until runtime.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

留一抹残留的笑 2024-08-23 22:58:06

使用 LINQ 怎么样?

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

How about using LINQ?

string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
伴梦长久 2024-08-23 22:58:06

它只是数组吗?或者是(例如)object[]?如果是这样:

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

请注意,任何一维引用类型数组都应该可转换为 object[] (即使它实际上是,例如 Foo[]),但值类型(例如 int[])则不能。所以你可以尝试:

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

但如果它是类似 int[] 的东西,你就必须手动循环。

Is it just Array? Or is it (for example) object[]? If so:

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

Note than any 1-d array of reference-types should be castable to object[] (even if it is actually, for example, Foo[]), but value-types (such as int[]) can't be. So you could try:

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

But if it is something like int[], you'll have to loop manually.

橘虞初梦 2024-08-23 22:58:06

您可以使用 Array.ConvertAll,如下所示:

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

You can use Array.ConvertAll, like this:

string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);
树深时见影 2024-08-23 22:58:06

简单而基本的方法;

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));

Simple and basic approach;

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);

Or just an another approach: You can use personNames.ToArray too:

string[] names = (string[]) personNames.ToArray(typeof (string));
倦话 2024-08-23 22:58:06

这可能可以被压缩,但它绕过了不能使用 Cast<> 的限制。或 System.Array 类型的对象上的 Linq Select。

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));

This can probably be compressed, but it gets around the limitation of not being able to use Cast<> or Linq Select on a System.Array type of object.

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));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文