2013-02-05 91 views
0

如果我理解正確,我有一個帶有int值的枚舉列表。我需要保持領先的0,所以有沒有辦法將此值視爲字符串而不是int?C#枚舉與數值,讀取值作爲字符串?

我枚舉

public enum CsvRowFormat 
    { 
     BeginningOfFile = 01, 
     School = 02, 
     Student = 03, 
     EndOfFile = 04 
    } 

目前我正在讀出值,這樣,我覺得低效

studentRowFormat.AppendFormat("0{0}",(int)TransactionFile.CsvRowFormat.Student).ToString(); 
+0

「0」+(int)TransactionFile.CsvRowFormat.Student – kenny

+0

@kenny他已經說過這就是他正在使用的。 – Servy

+3

查看[標準數字格式](http://msdn.microsoft.com/zh-cn/library/dwhawy9k.aspx)。如果您使用'{0:D2}'輸出任何具有前導零的1位數值。 –

回答

3

您可以使用"{0:D2}"作爲格式字符串。它將填充前導零的字符串,直到其長度爲2.

您正在使用的enum只是存儲正在分配的數值,而不是字符串值,因此它不保留事實上你提供了一個前導零。原生enum類型不能由字符串支持;它們必須由一個整數值支持。您可以創建自己的自定義類型,它看起來像是一個字符串支持的枚舉類型,但使用這樣的解決方案將比使用更適當的格式字符串與您現有的整數enum更加努力。

3

的Int32具有a ToString() that takes a format string。所以,最簡單的方法是這樣的:

studentRowFormat.Append(((int)TransactionFile.CsvRowFormat.Student).ToString("D2")); 

你並不需要在枚舉聲明中的前導0。

+0

您可以在格式字符串中使用數字格式,而不是使用「ToString」在'int'上。 – Servy

+0

你當然可以,但我發現很多人不知道可形成的ToString(),我想其他人會擴展AppendFormat()方法。 – MNGwinn

0

不幸的是,沒有辦法將該值視爲字符串而不是int。見C# Enum Reference。你可以使用其他答案提供的格式化選項,或者你可以編寫一個結構來讓你的代碼更加乾淨。因爲我不知道你使用枚舉的原因,我覺得我必須指出結構有一些行爲差異。下面是一個使用結構這個解決方案的一個例子:

public struct CsvRowFormat 
{ 
    public string Value { get; private set; } 
    private CsvRowFormat(string value) : this() 
    { 
     Value = value; 
    } 

    public static BeginningOfFile { get { return new CsvRowFormat("01"); } } 
    public static School { get { return new CsvRowFormat("02"); } } 
    public static Student { get { return new CsvRowFormat("03"); } } 
    public static EndOfFile { get { return new CsvRowFormat("04"); } } 
} 

用法示例:

studentRowFormat.Append(TransactionFile.CsvRowFormat.Student); 

希望這有助於!