2

enum 属性値を取得する Enum 拡張メソッドを作成しようとすると、次のような状況に陥りました。

VS 2010 の下のコードをコンパイルすると、次のエラーが表示されます。コードにコメントを付けて監視ツールを使用すると、行は値を返します (添付の画像を参照)。

理由はありますか?

 public static class EnumExtensions
{
    public static IEnumerable<object> GetAttributeValue(this Enum enm, Type attribute, string attributeName)
    {

        FieldInfo fi = enm.GetType().GetField(enm.ToString());

        var fiAtts = fi.GetCustomAttributes(attribute, false);

        if (fiAtts.Length == 0)
            return null;


        foreach (var att in fiAtts)
        {
            //VS2010 throws an error: No overload for method 'GetValue' takes 1 argument
            //yield ==> Ignore
            return att.GetType().GetProperty(attributeName).GetValue(att);
        }
    }
}

ここに画像の説明を入力

4

1 に答える 1

1

明らかに、 PropertyInfoクラスGetValueの .Net 4 のパラメーターとして 1 つの引数のみを取るメソッドはありません。

ウォッチ ウィンドウが何かを返す唯一の可能性は、コードのどこかに、入力として 1 つのパラメーターのみを必要GetValueとする型の拡張メソッドがあることです。PropertyInfono が指定されているため、コードでは不明である可能性がusing [PropertyInfoExtensionNamespace]あります。おそらく未知の(またはバグのある)理由で、デバッガーで知られています。

拡張メソッド + デバッガーのバグのある動作に関する議論については、このブログ投稿を参照してください。

于 2012-07-18T14:50:21.947 に答える