2011-05-26 40 views
0

我有一個classA,它具有一些公共屬性&重寫TosString方法來連接這些屬性中的字符串。它也有一個返回int key的屬性;如何從Regex獲得Dictionary <int,ClassA> .Split

我使用

string str = value1 + value2 + value3; 

每個值#分離的classA

string[] values = Regex.Split(str,'#'); 

foreach(classA value in values) 
{ 
    dictionary.add(value.key, value); 
} 

性能也能正常工作

============== ================================================== =====

對於這種情況我想使用

values.ToDictionary

任何一個可以建議如何使用它?

+2

請問你的代碼段的工作? values是一個字符串數組,但您希望將它們枚舉爲類型爲classA的對象。 – dlev 2011-05-26 19:23:18

+1

我認爲「它工作正常」應該重新審視。我懷疑這不會編譯。 – 2011-05-26 19:23:32

+1

我不明白你是如何迭代字符串數組中的對象作爲類型爲classA的項。這顯然不起作用,儘管你另有保證。 – spender 2011-05-26 19:24:02

回答

1

它發生在我身上,你可能真的希望得到一個類的屬性,並將它們變成字典中的鍵值對。

如果這就是你想要做的,那麼類 - >字符串 - >數組 - >字典正在走很長的路。

如果是這樣的話,也許你想嘗試一種更直接的方法

鑑於一類這樣的

class classA 
    { 
     public string Name{get;set;} 
     public string website { get; set; } 
     public string location { get; set; } 
     public int age { get; set; } 
     public int reputation { get; set; } 

     private string somthingPrivate { get; set; } 


    } 

下面創建一個字典變量命名的結果。

classA test = new classA() { Name = "Jeff Atwood", website = "codinghorror.com/blog", location = "El Cerrito, CA", age = 40, reputation = 15653 }; 


var result = test.GetType().GetProperties().ToDictionary(property => property.Name, 
                property => property.GetValue(test,null), 
                StringComparer.OrdinalIgnoreCase); 

foreach (var key in result.Keys) 
    Console.WriteLine("{0} : {1}", key, result[key]); 

,並把該

Name : Jeff Atwood 
website : codinghorror.com/blog 
location : El Cerrito, CA 
age : 40 
reputation : 15653 
Press any key to continue . . . 
2

這聽起來像你想的線沿線的東西:

Regex.Split(str,'#') 
.Select(s => new ClassA(s)) 
.ToDictionary(value => value.Key); 

這將是會從Split返回的每個字符串,將其轉換爲一個ClassA某種方式(即一部分是從你的問題丟失),和返回一個字典,其中的密鑰都來自於ClassA實例,值是實例本身。

+0

+1我認爲這是他們想要的,盡我所知,只有我會不同的是使用'string.Split'而不是'Regex.Split' – juharr 2011-05-26 19:45:10

+0

@juharr:是的,'string.Split'對於這種情況更好,但是如果他需要轉義分隔符(即忽略'\#') ,他將需要一個正則表達式。 – Gabe 2011-05-26 20:10:44

相關問題