我是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)));
答案 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,因此对于很长的序列会产生负面影响。但对于短序列,它会很好。