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