Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a char array to a string array?

Tags:

c#

casting

Given:

A string dayCodes (i.e. "MWF" or "MRFU") that I need to split and create a collection of strings so I can have a list of day of the week strings (i.e. "Monday", "Wednesday", "Friday" or "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);

Problem:

The problem is that you can't cast Char to String which I guess makes sense because one is not inherited from the other. Still you'd think that the compiler would cast the Char as a one character long String.

Is there a quick way (like using Cast<string>()) to do this so I don't have to create a List<string> from scratch?

like image 572
aarona Avatar asked Oct 29 '11 00:10

aarona


1 Answers

Just using char.ToString() would work:

var daysArray = days.ToCharArray().Select( c => c.ToString()).ToArray();

Alternatively, and a better solution in my mind why don't you use the string directly with a dictionary for the mapping:

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

with dayMapping just a Dictionary<char, string> that maps to the full day name:

Dictionary<char, string> dayMapping = new Dictionary<char,string>()
{
    {  'M', "Monday" },
    {  'T', "Tuesday" }
    //and so on
}
like image 200
BrokenGlass Avatar answered Sep 17 '22 15:09

BrokenGlass