0

と呼ばれるcustomAttributeがあることを確認してくださいResponseAttributes。インターフェイスといくつかの具体的なクラスを宣言しました{ Question 1, Question2, Question3 }

[AttributeUsage(AttributeTargets.Property)]
public class ResponseAttribute : Attribute { }
public interface IQuestion { }

public class Question1 : IQuestion
{
    [Response]
    public string Response { get; set; }
    public Question1() { Response = "2+1"; }
}

public class Question2 : IQuestion
{
    [Response]
    public decimal Response { get; set; }
    public Question2() { Response = 5; }
}

public class Question3 : IQuestion
{
    [Response]
    public string Response { get; set; }
    public Question3() { Response = "2+1"; }
}

今、私がやろうとしているのは、その属性を含むクラスが別のクラスと等しいことを確認する方法です。

つまり:

        List<IQuestion> questions = new List<IQuestion>()
        {
            new Question1(), new Question2()
        };

        Question3 question3 = new Question3();

        foreach (var question in questions)
        {
            // how to verify this condition:
            // if (customAttribute from question3 is equals to customAttribute fromquestion)
            // of course the question3 is equals to 1
        }

できる限り、それらは異なるタイプであり、それが私がとして設定した理由ResponseAttributeです。

4

2 に答える 2

1

Response プロパティ (型オブジェクト) でインターフェイスを使用してみることができます。できない場合は、「Response プロパティ」を伝えるクラスレベルの属性を使用できます。そのプロパティでリフレクションを使用できます。

例:


public class ResponseAttribute : Attribute { 
  public string PropertyName { get; set }
}

[ResponseAttribute ("CustomResponse")}
public class Question1 {
   public string CustomResponse;
}

via reflection
foreach(var question in questions) {
   var responseAttr = (ResponseAttribute) question.GetType().GetCustomAttributes(typeof(ResponseAttribute));

var questionResponse= question.GetType().GetProperty(responseAttr.PropertyName,question,null);
}

于 2012-04-06T07:28:14.263 に答える
0

equals メソッドをオーバーライドしてみてください:

    public override bool Equals(object obj)
    {
        if (obj is IQuestion)
            return this.Response == ((IQuestion)obj).Response;
        else
            return base.Equals(obj);
    }

お役に立てれば

于 2012-04-06T06:16:35.997 に答える