0

如果我理解正确,我有一个分配了 int 值的枚举列表。我需要保留前导 0,所以有没有办法将此值视为字符串而不是 int?

我的枚举

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

目前我正在读出这样的值,我发现它效率低下

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

3 回答 3

3

Int32 有一个 ToString() ,它采用格式 string。所以最简单的方法是这样的:

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

您不需要枚举声明中的前导 0。

于 2013-02-05T19:46:08.740 回答
3

您可以"{0:D2}"用作格式字符串。它将用前导零填充字符串,直到长度为 2。

您正在使用的enum只是存储您分配的数值,而不是字符串值,因此它不会保留您提供前导零这一事实的知识。本机enum类型不能由字符串支持;它们必须由整数值支持。您可以创建自己的“看起来”像字符串支持的枚举的自定义类型,但使用这样的解决方案将比仅使用更合适的格式字符串和现有 integer 更加努力enum

于 2013-02-05T19:46:32.070 回答
0

不幸的是,没有办法将值视为字符串而不是 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);

希望这可以帮助!

于 2013-02-05T19:51:36.470 回答