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

标签 c# casting

给定:

一个字符串 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);

问题:

问题是你不能投CharString我想这是有道理的,因为一个不是从另一个继承的。您仍然认为编译器会强制转换 Char。作为一个字符长 String .

有没有一种快速的方法(比如使用 Cast<string>() )来做到这一点,这样我就不必创建 List<string>从零开始?

最佳答案

仅使用 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
}

关于c# - 如何将字符数组转换为字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7936235/

相关文章:

c# - 包装 C# lambda 表达式

c# - 在 Avalonia 中为 TreeView 节点实现拖放

C++ 如何从一个模板类转换为另一个模板类?

使用 TValue 进行 Delphi 接口(interface)转换

java - 未经检查的强制转换泛型

c# - 有什么方法可以配置 Visual Studio 的 Intellisense 来选择实例变量而不是类?

c# - mvc模式中模型和 Controller 的分离

java - Hibernate : java. lang.ClassCastException : java. lang.Integer 无法转换为 java.lang.Double

c - 返回类型是否节省空间或时间

c# - 从 C# 调用 C++ 时出现 System.AccessViolationException