如何将数组列表转换为散列分隔的字符串?

时间:2015-04-26 21:08:17

标签: c# arraylist

我是c#的新手,我正在使用String.Join尝试将数组列表转换为散列分隔的字符串,例如“1#2#3#4”。我似乎无法使语法正常工作。

以下是我正在尝试的内容:

ArrayList aryTest = new ArrayList();
aryTest.Add("1");
aryTest.Add("2");
aryTest.Add("3");
string strTest = "";
strTest = string.Join("#", aryTest.ToArray(typeof(string)));

4 个答案:

答案 0 :(得分:6)

怎么样:

var list = new List<string>() { "1", "2", "3" };
var joined = string.Join("#", list);

ArrayList是一个“旧的”生成类,它不实现IEnumerable<T>所需的string.Join接口,也不是string[]或{ {1}}数组,可用于调用object[]

你最好使用string.Join,因为那样你就不必做List<string>来分配一个新数组,只是为了创建一个字符串。

答案 1 :(得分:3)

你需要额外演员:

strTest = string.Join("#", (string[])aryTest.ToArray(typeof(string)));

或者,只使用ToArray(),不带任何参数:

strTest = string.Join("#", aryTest.ToArray());

原因是Join的不同重载被称为:

strTest.ToArray(typeof(string))           ---> string.Join(string, params object[])
    // ToArray(Type) returns Array, it is passed as _one object_,
    // its ToString() is called, the results is "System.String[]"

(string[])strTest.ToArray(typeof(string)) ---> string.Join(string, params string[])

strTest.ToArray()                         ---> string.Join(string, IEnumerable<string>)
    // ToArray() returns object[]

答案 2 :(得分:2)

您也可以在数组中使用Foreach循环;

ArrayList aryTest = new ArrayList();
aryTest.Add("1");
aryTest.Add("2");
aryTest.Add("3");
string strTest = "";
foreach (var a in aryTest)
{
strTest += a +"#";
}
strTest.TrimEnd(new char[] {'#'});

答案 3 :(得分:2)

或者,您可以使用聚合查询并获得相同的结果。如果您对使用LINQ感兴趣,或者希望您的代码看起来更加美观和干净。

 ArrayList aryTest = new ArrayList();
            aryTest.Add("1");
            aryTest.Add("2");
            aryTest.Add("3");
            string strTest = "";            
 strTest = aryTest.ToArray().Aggregate((current, next) => current + "#" + next).ToString();

输出结果为:

1#2#3

聚合是一个函数,它接受一组值并返回一个标量值。 T-SQL的示例包括min,max和sum。 C#支持聚合和聚合作为扩展方法。使用点符号,您只需在IEnumerable对象上调用一个方法。

请注意:请注意:由于我没有使用StringBuilder,因此对于很长的序列会产生负面影响。但对于短序列,它会很好。