2017-03-27 26 views
0

我正在研究數據可視化工具。它從純文本文件中檢索一堆數據,然後繪製該數據的各種圖表和圖形。如何創建一個數據結構,其中包含在運行時定義類型的屬性

到目前爲止,我一直在處理一組我知道類型的數據。

例如,如果我有一個CSV文件看起來像這樣的工作:

ID,用戶名,郵件的數量,消息
23123124,@SomeUsername,5,這1秒一個5tr1ng
89134349, @AnotherUsername,8,另一個字符串

然後我可以存儲這個在這樣一個對象:

public class SomeClass 
{ 
    private string id; 
    private string username; 
    private int numberOfMessages; 
    private string message; 
} 

然後,我只是有一個List<SomeClass>

這是偉大的一切,但它只適用於該特定的CSV文件。我想要一個可以靈活的數據結構,具體取決於CSV文件的內容。

通過閱讀文本文件第一行中的標題行,可以很容易地發現這些屬性的數量和名稱。每種數據的類型都不明確(例如,一個id可以存儲爲int或字符串),所以我要求用戶告訴應用程序對於每個屬性使用何種類型。我可以通過在字符串,int,布爾等選項旁邊顯示每個屬性的名稱來做到這一點。

但是,如何獲取用戶輸入並創建包含這些類型屬性的數據結構。因此,如果用戶經過一個形式3個下拉菜單並選擇「字符串」,「整型」和「布爾」,能有效地希望對象,看起來像這樣:

public class SomeClass 
{ 
    private string someString; 
    private int someInt; 
    private bool someBool; 
} 

什麼是實現的最佳途徑這個?我對泛型有一個合理的理解,但不確定如何在這種情況下使用它們。我聽說反射,類型類和動態關鍵字,但不真正瞭解它們。我曾嘗試使用字典,但一直卡住。這些選擇中的任何一個都可行嗎?它們是否過度殺傷?我是否在說這個? 幫助我請!:D

謝謝!

+0

你有固定的csv文件集來處理或者你在處理一系列具有隨機數量的列和數據類型的csv文件?即你可以說..這是報告類型1,2,3等。每個人都有一組已知的列? – Wheels73

+0

另外,你剛剛考慮使用字符串的初始csv加載? – Wheels73

+0

@ Wheels73 CSV文件超出了我的控制範圍。它們將由用戶提供。所以列的數量和它們應該存儲的類型對我來說是未知的。我最初可以將CSV文件的值作爲字符串加載,但我需要將它們轉換爲用戶定義的正確類型。 – Redtama

回答

1

當你閱讀csv文件時,你可以有一個包含dictonary的列表。 小例子...

List<Dictionary<string, object> yourDataInAList = new List<Dictionary<string, object>(); 
//... you now read the csv file and iterate the file 
Dictonary<string, object> dynamicDataStructure = new Dictonary<string, object>(); 
// ... you iterate now through the values in the entry ... 
dynamicDataStructure.Add(yourHeaderName, yourValue); 
// ... at the end of the itereation through the values in the entry we have to add 
// this dic in the list 
yourDataInAList.Add(dynamicDataStructure); 

不復雜,但一個很大的靈活性:)但是你要知道,頭不應該有它的多個相同的名字......

+0

因此,你是否建議在需要時將對象轉換爲適當的類型?我想我還必須存儲由用戶指定的標題名稱和類型的字典(我可以將它作爲常見類型的枚舉)。然後,無論何時我需要對數據執行特定於類型的操作,我都可以檢查標題名稱和類型的字典,然後轉換爲指定的類型。我認爲這會工作,但它感覺非常混亂,我認爲這會導致其他問題......嗯......:\ – Redtama

+0

你可以使用「as」並檢查變量是否爲空像 int i = dynamicDataStructureObject as int if(i!= null)//我是一個int :) – Archimedes

相關問題