7

私は列挙型を持っています

public enum ProductionStatus {
    Received = 000,
    Validated = 010,
    PlannedAndConverted = 020,
    InProduction = 030,
    QAChecked = 040,
    Delivered = 070,
    RejectedOrCancelled = 100
}

この列挙型からキーごとに値を取得する必要があります。たとえば、ProductionStatus.Validated010 を返す必要がある場合などです。これを行うにはどうすればよいですか?

4

6 に答える 6

7

そこに別のソリューションを投入するだけです...

((int)ProductionStatus.Validated).ToString("D3");
于 2013-02-22T08:56:58.603 に答える
4

フォーマットあり:

((int)ProductionStatus.Validated).ToString("000",  CultureInfo.InvariantCulture);

これは短くて単純で、文字列を返します。

必要に応じて、それを拡張メソッドに組み込むことができます

public static class ProdStatusExtensions {
    public static string (this ProductionStatus status) {
        return ((int)status).ToString ("000",  CultureInfo.InvariantCulture);
    }
}
于 2013-02-22T08:45:51.110 に答える
4
var code = (int)ProductionStatus.Validated;

次のように、int を列挙値に変換することもできます。

var status = (ProductionStatus)10;

bool eq = 010 == 10;彼らは実際には等しい

文字列を使用したい場合は、このメソッドを使用してください。

    static string EnumToString(ProductionStatus val)
    {
        switch (val)
        {
            case ProductionStatus.Received:
                return "000";
            case ProductionStatus.Validated:
                return "010";
            case ProductionStatus.PlannedAndConverted:
                return "020"; 
            default:
                return "Unknown value";
        }
    }
于 2013-02-22T08:34:19.480 に答える
3
var enumValues = Enum.GetValues(typeof(ProductionStatus)).Cast<object>()
                                .ToDictionary(enumValue => enumValue.ToString(), enumValue => (int)enumValue);

foreach (var enumValue in enumValues)
{
    Console.WriteLine("item: {0}, value: {1}", enumValue.Key, enumValue.Value.ToString("000");
}

このように列挙型からすべての値と名前を取得できます。

于 2013-02-22T08:38:59.350 に答える
1

これは逆のアクションを実行するユニバーサルヘルパークラスです- ANY Enumから値でキーを取得します:

public static class EnumHelpers {

  public static T GetEnumObjectByValue<T>(int valueId) {
    return (T) Enum.ToObject(typeof (T), valueId);
  }

}

そして、それは次のように機能します-このEnumがあるとします:

public enum ShipmentStatus {
  New = 0,
  Shipped = 1,
  Canceled = 2
}

したがって、Enumオブジェクトを取得するには、次のShipmentStatus.Shippedオブジェクトを返します。

var enumObject = EnumHelpers.GetEnumObjectByValue<ShipmentStatus>(1);

したがって、基本的に、任意の Enum オブジェクトを貼り付けて、値で取得できます。

var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE);
于 2013-05-09T14:19:22.600 に答える
1

一般に、列挙型の作業を容易にするメソッドの配列を含む列挙型クラスがあります。

ここで、列挙可能な値を整数またはその他の型にキャストする場合は、次のように記述できます。

int validatedAsInt = (int) ProductionStatus.Validated

validatedAsInt には、ProductionStatus.Validated の値が含まれます。

「010」のような数字を取得したい場合は、次のように記述できます。

string validatedAsString = ((int) ProductionStatus.Validated).ToString("000");

または:

string validatedAsString = ((int) ProductionStatus.Validated).ToString("D3");

validatedAsStringには「010」が含まれます。

于 2013-02-22T08:39:58.863 に答える