如何将字符数组转换为字符串数组?

11

给定:

一个字符串 dayCodes (例如 "MWF""MRFU"),我需要将其拆分并创建一个字符串集合,以便我可以得到一周中的日期字符串列表(例如 "Monday", "Wednesday", "Friday""Monday", "Thursday", "Friday", "Sunday")。

// this causes a run-time exception because you can't cast Char to String
var daysArray = days.ToCharArray().Cast<string>().ToArray();

// for each dayCode, overwrite the code with the day string.
for (var i = 0; i < daysArray.Length; i++)
{
    switch (daysArray[i])
    {
        case "M":
            daysArray[i] = "Monday";
            break;

        case "T":
            daysArray[i] = "Tuesday";
            break;

        case "W":
            daysArray[i] = "Wednesday";
            break;

        case "R":
            daysArray[i] = "Thursday";
            break;

        case "F":
            daysArray[i] = "Friday";
            break;

        case "S":
            daysArray[i] = "Saturday";
            break;

        case "U":
            daysArray[i] = "Sunday";
            break;
    }
 }

 daysArray[daysArray.Length - 1] = "and " + daysArray[daysArray.Length - 1];

 return string.Join(", ", daysArray);
问题: 问题在于你不能将Char强制转换为String,我想这是有道理的,因为它们没有继承关系。但你仍然会认为编译器会将Char转换为长度为一个字符的String
有没有一种快速的方式(类似于使用Cast<string>())来做到这一点,这样我就不必从头开始创建一个List<string>了?
4个回答

27
只需要使用char.ToString()即可:
var daysArray = days.ToCharArray().Select( c => c.ToString()).ToArray();

或者,我认为更好的解决方案是直接使用字符串和字典进行映射:

var daysArray = days.Select( c => dayMapping[c]).ToArray();

使用dayMapping,它只是一个将字符映射到完整星期几名称的Dictionary<char, string>

Dictionary<char, string> dayMapping = new Dictionary<char,string>()
{
    {  'M', "Monday" },
    {  'T', "Tuesday" }
    //and so on
}

2
在这里,考虑使用System.DayOfWeek枚举代替一个魔术字符串可能是值得的。 - uglybugger
@uglybugger 我同意,但我写这个方法的目的就是为了连接字符串,因此可能需要更多的代码 (即,在所有内容上调用 .ToString() 方法)。 - aarona

2
char[] daysCodeArray = days.ToCharArray();
string[] daysArray = daysCodeArray.Select(el =>
{
    switch (el)
    {
        case 'M':
            return "Monday";

        case 'T':
            return "Tuesday";

        case 'W':
            return "Wednesday";

        case 'R':
            return "Thursday";

        case 'F':
            return "Friday";

        case 'S':
            return "Saturday";

        case 'U':
            return "Sunday";
     }
     throw new ArgumentException("Invalid day code");
}).ToArray();

如果您想的话,可以将lambda更改为单独的方法。


1
你可以这样做:
            var dayCode = "MWF";
            var daysArray = new List<string>();
            var list = new Dictionary<string, string>{
                {"M", "Monday"},
                {"T", "Tuesday"},
                {"W", "Wednesday"},
                {"R", "Thursday"},
                {"F", "Friday"},
                {"S", "Saturday"},
                {"U", "Sunday"}
            };

            for(int i = 0,max = dayCode.Length; i < max; i++)
            {
                var tmp = dayCode[i].ToString();
                if(list.ContainsKey(tmp))
                {
                    daysArray.Add(list[tmp]);
                }
            }
            Console.WriteLine(string.Join(",", daysArray));

输出:

enter image description here


1

对于任何在搜索中找到此问题的人来说,回答标题中的问题...(不是描述的问题...那是早期的帖子之一。)

var t = "ABC";
var s = t.ToCharArray().Select(c => c.ToString()).ToArray();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接