【问题标题】:C# best way to convert object to string arrayC# 将对象转换为字符串数组的最佳方法
【发布时间】:2019-02-23 06:55:35
【问题描述】:

我陷入了困境。 我想将这个对象(对象数组)转换为字符串数组,但我找不到这样做的好方法。我需要使用 for 循环吗?如果有人也可以告诉我为什么这两种方法失败了,我将不胜感激。

    object greetings = new object[] { "hi", "hello", "greetings" };
    if (greetings.GetType().IsArray)
    {
        //string[] arr = greetings as string[];
        //string[] arr = (string[])greetings;
    }

【问题讨论】:

  • var asArray = ((object[])greetings).Cast<string>().ToArray()
  • 要理解的关键是,将greetings 转换为字符串数组是无效的。您没有字符串数组。你有一个对象数组(其中所有对象都是字符串)。

标签: c# arrays string object


【解决方案1】:
string[] arr = Array.ConvertAll((object[])greetings, Convert.ToString);

【讨论】:

  • 我反对这种方法的论点是Convert.ToString 是关于转换(即将一种类型更改为另一种) - 这个答案确实有效,这很好,但它是一种解决问题的奇怪方法。您在这里想要的是强制转换(因为数组中的数据已经是一个字符串)。
  • Convert.ToString 在这里使用起来很方便,当处理string 对象时,它会返回自己。 @mjwills 如果你面临Convert这个词的困境,那么你可以定义另一个,比如obj => (string)obj
  • 是的,我认为演员阵容在逻辑上是一个更好的答案。我并不否认您的回答有效。
【解决方案2】:

如果您只想包含字符串对象:

string[] result = greetings.OfType<string>().ToArray();

如果你想包含所有内容(非字符串抛出异常):

string[] result = greetings.Cast<string>().ToArray();

【讨论】:

    【解决方案3】:

    试试这个。

    object[] objArray = { "A", "B", "C" };
    string[] strArray = objArray.Cast<string>().ToArray();
    
    //2.
    object[] objArray2 = { "A", null, 1, false };
    foreach (object obj in objArray2)
    {
      if (obj != null)
      {
        if (obj.GetType() == typeof(string))
        {
          //strings values in here
        }
      }
    }
    

    【讨论】:

    • 感谢您的快速回复。但是,在我的问题中,它是一个对象,而不是对象数组。所以,我不能把问候放在 foreach 循环中
    • 这不能回答问题。
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 2011-03-29
    • 2021-08-03
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多