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()があります。したがって、最も簡単な方法は次のようなものです。

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

enum宣言の先頭に0は必要ありません。

于 2013-02-05T19:46:08.740 に答える
3

"{0:D2}"フォーマット文字列として使用できます。長さが2になるまで、文字列に先行ゼロを埋め込みます。

使用enumしているのは、文字列値ではなく、割り当てているものの数値を格納しているだけなので、先行ゼロを指定したという事実の知識は保持されません。ネイティブenumタイプは文字列で裏付けることはできません。それらは整数値で裏付けられている必要があります。文字列に裏打ちされた列挙型のように「見える」独自のカスタムタイプを作成できますが、そのようなソリューションを使用すると、既存の整数でより適切なフォーマット文字列を使用するよりもはるかに手間がかかります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 に答える