簡體   English   中英

具有數字值的C#枚舉,以字符串形式讀取該值?

[英]C# Enum With Number Value, Reading That Value as String?

如果我理解正確,我有一個分配了int值的枚舉列表。 我需要保持前導0,有沒有辦法將此值視為字符串而不是int?

我的枚舉

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

目前,我正在讀取像這樣的值,但發現效率低下

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

Int32有一個ToString(),它采用格式string 因此,最簡單的方法是這樣的:

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

您在枚舉聲明中不需要前導0。

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

您使用的enum只是存儲分配值的數字值,而不是字符串值,因此它不保留有關您提供前導零的事實的知識。 本地enum類型不能由字符串支持; 它們必須以整數值作為后盾。 您可以創建自己的自定義類型,使其看起來像是由字符串支持的枚舉,但是使用這種解決方案將比僅在現有的整數enum使用更合適的格式字符串花費更多的精力。

不幸的是,沒有一種方法可以將值視為字符串而不是int。 請參見C#枚舉參考 您可以使用其他答案提供的格式設置選項,也可以編寫一個結構,使您的代碼更簡潔。 因為我不知道您使用枚舉的原因,所以我必須指出結構在行為上有所不同。 這是為該解決方案使用結構的示例:

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);

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM