0

別のオブジェクトに保持されている文字列値を調べて、カスタム オブジェクトにカスタム列挙型プロパティを設定しようとしていますが、「式を介して型を参照できません」というエラーが表示され続けます。

これまで私は試しました

rec.Course  = (CourseEnum)Enum.Parse(typeof(CourseEnum), rr.course);

ここで、rec.Course は CourseEnum Enumeration のメンバーを必要とし、rr.course は文字列です。

また、値がチェックされるswitchステートメントを実行しようとしましたがrr.course(特定の値しかありません)、同じ結果が得られます

列挙型は次のように定義されます。

public enum CourseEnum
    {
        [StringValue("Starters")]
        Starters,
        [StringValue("Main Course")]
        MainCourse,
        [StringValue("Desserts")]
        Desserts
    };

public class StringValue : System.Attribute
{
    private string _value;

    public StringValue(string value)
    {
        _value = value;
    }

    public string Value
    {
        get { return _value; }
    }

}

public static class StringEnum
{
    public static string GetStringValue(Enum value)
    {
        string output = null;
        Type type = value.GetType();

        //Check first in our cached results...

        //Look for our 'StringValueAttribute' 

        //in the field's custom attributes

        FieldInfo fi = type.GetRuntimeField(value.ToString());
        StringValue[] attrs =
           fi.GetCustomAttributes(typeof(StringValue),
                                   false) as StringValue[];
        if (attrs.Length > 0)
        {
            output = attrs[0].Value;
        }

        return output;
    }
}
4

2 に答える 2

0

あなたのコードEnum.Parseで CourseEnum を使用していることがわかりますrecipeCourse

CourseEnumサンプル コードで 4が定義されている場所を見つけることができません。

于 2012-09-02T13:13:46.810 に答える
0

@Hans Kesting によると、答えはここにありました:式で型を参照できないのはなぜですか?

問題は、列挙型自体を持つ列挙型を持つフィールドを使用していたことです。

于 2013-04-07T15:43:54.913 に答える