将一个基元数组转换为单个字符串

时间:2009-06-08 22:49:05

标签: c#

我正在编写一个程序的插件,我可以通过在每个具有键字符串和值字符串的对象上附加“User Strings”来为程序中的对象赋值。但是,在某些情况下,我需要存储一个基本类型的数组,而不是只存储一个值。那么将值数组转换为字符串的最简单方法是什么,然后将相同的字符串转换回原始的数组值。

4 个答案:

答案 0 :(得分:2)

您必须使用拆分和加入:

这是一篇很好的文章:

http://www.csharp-station.com/HowTo/StringJoinSplit.aspx

答案 1 :(得分:1)

您可以创建一些扩展方法,将您的集合转换为分隔字符串,从而传入自定义委托以执行每个项目的转换:

public static string ToDelimitedString<T>
    (this IEnumerable<T> source, Func<T, string> converter, string separator)
{
    return string.Join(separator, source.Select(converter).ToArray());
}

public static IEnumerable<T> FromDelimitedString<T>
    (this string source, Func<string, T> converter, params string[] separator)
{
    return source.Split(separator, StringSplitOptions.None).Select(converter);
}

以下是一些使用示例:

int[] source1 = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

string txt1 = source1.ToDelimitedString(x => x.ToString(), "|");
Console.WriteLine(txt1);    // "1|2|3|4|5|6|7|8|9|10"

int[] dest1 = txt1.FromDelimitedString(x => int.Parse(x), "|").ToArray();
Console.WriteLine(source1.SequenceEqual(dest1));    // "True"

// ...

string[] source2 = new[] { "Fish & Chips", "Salt & Pepper", "Gin & Tonic" };

string txt2 = source2.ToDelimitedString(x => HttpUtility.UrlEncode(x), "&");
Console.WriteLine(txt2);    // "Fish+%26+Chips&Salt+%26+Pepper&Gin+%26+Tonic"

var dest2 = txt2.FromDelimitedString(x => HttpUtility.UrlDecode(x), "&");
Console.WriteLine(source2.SequenceEqual(dest2));    // "True"

答案 2 :(得分:0)

假设您知道将使用哪些基本类型,您可以使用空格(或您选择的任何内容)作为分隔符循环以形成单个字符串,然后使用String.Split()方法将字符串拆分回来进入一个字符串数组,最后循环遍历该数组并转换其成员以重现原始数组。

答案 3 :(得分:0)

分割/加入很好,但如果在你的字符串中会怎么样 是分隔符? 我建议使用一些编码,例如Base64。