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?
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
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With