Überprüfen Sie, ob ich ein customAttribute namens ResponseAttributes
habe. Ich habe eine Schnittstelle und mehrere konkrete Klassen deklariert { Question 1, Question2, Question3 }
Wie ermittelt man, ob ein customAttribute aus einer Klasse gleich ist?
[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"; }
}
Nun, was ich versuche zu tun, wie eine Klasse, um zu überprüfen, die enthält das Attribut ist zu einem anderen gleich?
ich meine:
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
}
Wie Sie können, sie unterschiedliche Typen sind, das ist der Grund, warum ich als ResponseAttribute
gesetzt.
Warum brauchen Sie überhaupt ein Attribut? Wenn Ihre Schnittstelle eine Response-Eigenschaft enthält (z. B. decimal Response {get; set;}), können Sie Ihre Variablen über die gemeinsame Eigenschaft – kristian
vergleichen. Das Problem hier ist, dass jede Frage eine Response-Eigenschaft hat, die jedoch unterschiedlich ist datatype, also dachte ich, dass das customAttribute –
gut ist Einer der Vorteile der Verwendung einer Schnittstelle IQuestion ist, dass Sie die Verwendung eines vergleichbaren Standarddatentyps für einige Ausgaben erzwingen können. Sie möchten vielleicht nicht ändern, wie Response funktioniert (unterschiedliche Datentypen beibehalten), aber Sie können eine Interface-Eigenschaft "Answer" als String hinzufügen, der bei der Implementierung die Response als String zum Vergleich ausgibt. Dann wird dein for-each trivial, wenn FrageA.Answer == questionB.Answer ... ' – EtherDragon