2017-08-31 2 views
-1

Ich habe folgendes Setup:Erhalten Sie alle Eigenschaften einer implementierten Schnittstelle

public interface IInput 
{ 
} 

public class SomeInput : IInput 
{ 
    public int Id { get; set; } 
    public string Requester { get; set; } 
} 

Jetzt möchte ich eine Funktion schreiben, die alles nehmen kann, die iInput und Verwendung Reflexion implementiert mich um die Eigenschaften zu geben:

public Display(IInput input) 
{ 
    foreach (var property in input.GetType().GetProperties()) 
    { 
     Console.WriteLine($" {property.Name}: {property.GetValue(input)}"); 
    } 
} 

Wo

var test = new SomeInput(){Id=1,Requester="test"}; 
Display(test); 

zeigt 210
Id: 1 
Requester: test 
+5

Okay, Sie scheinen also den Code gegeben zu haben, den Sie wollten ... also, was ist die Frage? –

+0

Was er gesagt hat. Wollen Sie nur die Werte für die IInput-Eigenschaften des Objekts oder für alle seine Eigenschaften? –

+0

Warte, das wird funktionieren? Ich dachte, Reflexion würde nur zeigen mir die Eigenschaften der Schnittstelle (IInput) nicht die implementierten Eigenschaften (SomeInput) – CuriousDeveloper

Antwort

1

Wenn Sie typeof() verwenden, erhalten Sie den Typ der Variablen. Aber wenn Sie GetType() verwenden, erhalten Sie den tatsächlichen Laufzeittyp, aus dem Sie alle implementierten Eigenschaften widerspiegeln können.

void DumpProperties(IInput o) 
{ 
    var t = o.GetType(); 
    var props = t.GetProperties(BindingFlags.Instance | BindingFlags.Public); 
    foreach (var prop in props) 
    { 
     Console.WriteLine(String.Format("Name: {0} Value: {1}", 
      prop.Name, 
      prop.GetValue(o).ToString() 
     ); 
    } 
}  
+0

Das ist schon was OP tut –

Verwandte Themen