Mam klasę, która implementuje interfejs. Chciałbym zbadać tylko wartości właściwości, które implementują mój interfejs.Pobierz tylko właściwości implementujące interfejs
Więc powiedzmy na przykład mam ten interfejs:
public interface IFooBar {
string foo { get; set; }
string bar { get; set; }
}
a ta klasa:
public class MyClass :IFooBar {
public string foo { get; set; }
public string bar { get; set; }
public int MyOtherPropery1 { get; set; }
public string MyOtherProperty2 { get; set; }
}
Tak, muszę to osiągnąć, bez magicznych ciągów:
var myClassInstance = new MyClass();
foreach (var pi in myClassInstance.GetType().GetProperties()) {
if(pi.Name == "MyOtherPropery1" || pi.Name == "MyOtherPropery2") {
continue; //Not interested in these property values
}
//We do work here with the values we want.
}
Jak mogę to zmienić:
if(pi.Name == 'MyOtherPropery1' || pi.Name == 'MyOtherPropery2')
Zamiast sprawdzać, czy moja nazwa własności to ==
do magicznego ciągu, chciałbym po prostu sprawdzić, czy właściwość jest zaimplementowana z mojego interfejsu.
Używam interfejsu porównać wartości dwóch obiektów, które implementują ten interfejs, ale nie może być tego samego typu. Zasadniczo kontrola równości między dwoma różnymi typami. Funkcja z tym kodem zwraca nie tylko równe/nie równe, ale różnice. To jest powód refleksji. –
Czy moja druga sugestia pomaga, aby po prostu powtórzyć właściwości na typie interfejsu? –
Tak, tego właśnie potrzebowałem. Przyjmuję odpowiedź, gdy tylko upłynie czas akceptacji. Dziękuję Paul. –