2011-10-29 144 views
10

考慮:如何將char數組轉換爲字符串數組?

的字符串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>

回答

21

只需使用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

+0

@uglybugger我同意,除了我所做的方法的重點是連接字符串,所以它只是更多的代碼(即必須調用'.ToString()'的一切。 – DJTripleThreat

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更改爲單獨的方法。

+0

+1我不知道你可以用lambdas做到這一點。 – James

+0

+1是的漂亮華麗。 – DJTripleThreat

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();

相關問題