0

デザインの定数を定義するクラスがあります。たとえば、次のとおりです。

public static class ObjectTypes
{
    /// <summary>
    /// The identifier for the ConfigurableObjectType ObjectType.
    /// </summary>
    public const uint ConfigurableObjectType = 2;

    /// <summary>
    /// The identifier for the FunctionalGroupType ObjectType.
    /// </summary>
    public const uint FunctionalGroupType = 4;

    /// <summary>
    /// The identifier for the ProtocolType ObjectType.
    /// </summary>
    public const uint ProtocolType = 5;
}

私のコードでは、整数値 for.eg valueInt を計算しました。このクラスで定義されているすべての定数と valueInt を比較したいと思います。If-then-else ブロックを使用したり、ケースを切り替えたりせずに簡単に実行する方法はありますか? 多数の定数がある場合、この種のアプローチは大きなコードになるためです。どういうわけかより良いアプローチは可能ですか?私はC#で作業しています。

注:上記のクラスの設計を変更することはできません。たとえば、ライブラリや他の人が設計した変更できないクラスから定義済みのクラスを取得するため、コードでのみ参照する必要があります。

4

2 に答える 2

0

きれいな構造ではありませんが、既存のコードを変更せずに、特定の問題の可能な解決策を提供します。

次のコードは、リフレクションを使用して比較します

        string fieldName = "not found";
        uint testValue = 5;

        Type t = typeof(ObjectTypes);
        FieldInfo[] f = t.GetFields();
        Array.ForEach<FieldInfo>(f, (info) => { if (testValue == (uint)info.GetValue(null)) fieldName = info.Name; });

コードの最後に「ProtocolType」を生成します。

お役に立てれば、

于 2013-11-12T20:35:57.537 に答える