2012-03-21 21 views
2

我々のアプリでは、文字列を使用して列挙値を示す文字値を格納します。 EXのために、テーブル内のセルを整列させるための列挙: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(); 

が... IVEはこれを試みたが、それは指定されたキャスト有効ではありません言った:

は、ここで私はに頼ってきたものだ

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

はあなたに感謝します! LINQの投影とEnum.Parseを使用して

答えて

5

確か:

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

はもちろん、すべての値が有効であると仮定し...それはあなたが引くことができるという事実を使用していますその数字の値を得るために任意の桁の文字から '0'を選択し、intからCellAlignmentに明示的に変換することができます。

+0

ありがとう、これは超短いです。列挙型はintに基づいているので、私は明示的に変換することが解析よりも優れていると信じています。 – mdelvecchio

4

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

ループを反復せずにLINQを実行しようとしています。 – mdelvecchio

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

ループを繰り返さずにLINQを実行しようとしています。 – mdelvecchio

関連する問題