2010-01-05 48 views
5

我試圖加載CSV文件(delims是「;」和引號「」「)。如何定義一個FileHelpers元素類的字段的默認值

我已經成功地創造了一切(嚮導工具是真棒),但有一兩件事,我無法找到一個解決方案。

基本上,我有一個整數(System.Int32)列。從理論上講的記錄將有正整數值爲,但有時我可能會在該列中遇到一個值「N/A」,我想實現的是讓FileHelpers分配一個默認值(-1工作正常),當它遇到該列中的「N/A」時。

有誰知道這是可能的嗎? PS:我可能需要爲System.DateTime字段(它也可能有「N/A」)做同樣的事情。

回答

5

想到做你想做的事情的最好方法是在這些字段上使用FieldConverter屬性並創建自定義轉換器類,以指定您希望字段具有的默認值。

您需要創建一個繼承ConverterBase的類,然後爲兩個虛擬方法StringToField()FieldToString()提供實現。

FieldToString()方法中,您將檢查字符串是否等於「N/A」。如果是,則返回所需的默認值。

您將需要兩個不同的類,一個可以處理Int32,另一個可以處理DateTime

FileHelpers文檔中有一個如何執行此操作的示例。 Link

+0

啊哈!正是我想要的! – Paulius 2010-01-05 16:07:05

5

像布蘭登說ü需要使用此轉換

// In your class 
[FieldConverter(typeof(NoValueConverter))] 
public int Number; 

// Te Converter 
public class NoValueConverter : ConverterBase 
{ 
    public override object StringToField(string sourceString) 
    { 
     if (sourceString.Trim().ToUpper() == "N/A") 
     return -1; // or int.MinValue; 
     else 
     return Integer.Parse(sourceString); 
    } 

    public override string FieldToString(object fieldValue) 
    { 
     return fieldValue.ToString(); 
    } 

} 

我們很高興ü喜歡嚮導:)(我們正在一個很酷的功能,自動檢測,以使其更容易地創建映射類)

+0

由於from是LINQ關鍵字,應該使用不同的參數名稱,還是不重要? – 2010-01-05 16:42:36

+0

你是對的馬特:)現在編輯,謝謝 也許我必須更新爲.NET 2.0創建的庫的示例代碼之前從保留關鍵字。 – MarcosMeli 2010-01-05 16:59:18

相關問題