2012-03-21 65 views
2

我們的應用程序使用一個字符串來容納用來指示枚舉值的字符值。爲前,枚舉用於在表對準細胞:將char數組轉換爲枚舉數組?

enum CellAlignment 
{ 
    Left = 1, 
    Center = 2, 
    Right = 3 
} 

和用於表示比對5列的表中的字符串:"12312"。有沒有一種簡潔的方式來使用LINQ將此字符串轉換爲CellAlignment[] cellAlignments

這裏就是我使出:

//convert string into character array 
char[] cCellAligns = "12312".ToCharArray(); 

int itemCount = cCellAligns.Count(); 

int[] iCellAlignments = new int[itemCount]; 

//loop thru char array to populate corresponding int array 
int i; 
for (i = 0; i <= itemCount - 1; i++) 
    iCellAlignments[i] = Int32.Parse(cCellAligns[i].ToString()); 

//convert int array to enum array 
CellAlignment[] cellAlignments = iCellAlignments.Cast<CellAlignment>().Select(foo => foo).ToArray(); 

...香港專業教育學院試過,但它說,指定的強制轉換無效:

CellAlignment[] cellAlignmentsX = cCellAligns.Cast<CellAlignment>().Select(foo => foo).ToArray(); 

謝謝!

回答

5

肯定的:

var enumValues = text.Select(c => (CellAlignment)(c - '0')) 
        .ToArray(); 

假定所有的值都是有效的,當然...它使用的事實,你可以減去'0'從任何數字字符獲得該數字的值,並且您可以明確地從int轉換爲CellAlignment

+0

謝謝,這是超短的。由於枚舉是基於整數,我相信顯式轉換比解析更好。 – mdelvecchio 2012-03-21 18:18:33

4

使用LINQ的投影和Enum.Parse

string input = "12312"; 
CellAlignment[] cellAlignments = input.Select(c => (CellAlignment)Enum.Parse(typeof(CellAlignment), c.ToString())) 
             .ToArray(); 
0

您可以使用此:

var s = "12312"; 
s.Select(x => (CellAlignment)int.Parse(x.ToString())); 
0

你可以寫一個循環

List<CellAlignment> cellAlignments = new List<CellAlignment>(); 

foreach(int i in iCellAlignments) 
{ 
    cellAlignments.Add((CellAlignment)Enum.Parse(typeof(CellAlignment), i.ToString()); 
} 
+0

試圖做w/LINQ而不是迭代循環。 – mdelvecchio 2014-05-29 15:23:34

1

你可以使用Array.ConvertAll功能是這樣的:

CellAlignment[] alignments = Array.ConvertAll("12312", x => (CellAlignment)Int32.Parse(x)); 
0

嘗試類似的東西下列;

int[] iCellAlignments = new int[5] { 1, 2, 3, 1, 2 }; 
     CellAlignment[] temp = new CellAlignment[5]; 


     for (int i = 0; i < iCellAlignments.Length; i++) 
     { 
      temp[i] =(CellAlignment)iCellAlignments[i]; 
     } 
+0

試圖做w/LINQ而不是迭代循環。 – mdelvecchio 2014-05-29 15:22:42