Ich habe eine Schnittstelle namens IAuditable wie folgt:Passing Klassentyp generische Methode zur Laufzeit
public interface IAuditable
{
string AuditSummary
{
get;
}
string AuditDetails
{
get;
}
}
Und zwei generische Methode in Audit Trail-Klasse wie folgt:
public T GetActualOldValue<T>() where T : IAuditable
{
return FromXElement<T>(OldValue);
}
public T GetActualNewValue<T>() where T : IAuditable
{
return FromXElement<T>(NewValue);
}
sowie i eine habe Eigenschaft Rückkehr Audit Zusammenfassung durch eine Klasse zur Laufzeit immer wie folgt:
public string AuditSummary
{
get
{
if (HasNewValue || HasOldValue)
{
string libraryVal = GetLibraryValue();
Assembly assembly = Assembly.Load(libraryVal);
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass == true)
{
if (type.FullName.EndsWith("." + ClassName))
{
/*Here i want to call GetActualNewValue<foundClass>().AuditSummary
* or GetActualOldValue<foundClass>().AuditSummary;
*/
}
}
}
}
return "";
}
}
Wie Sie wissen, können wir Klasse zur Laufzeit in bestimmten Bibliothek finden, Bitte beachten Sie, ich möchte nicht eine generische Methode zur Laufzeit aufrufen, nur generische Methode mit funded aufrufen, mit anderen Worten, wie kann ich eine bestimmte übergeben Klasse GetActualNewValue < ...>() als T,
AuditTrail auditTrail = AuditTrail.GetAuditTrail(76);
string summmary = auditTrail.GetActualOldValue<DTClient>().AuditSummary;
string details = auditTrail.GetActualOldValue<DTClient>().AuditDetails;
Dieser Code funktioniert perfekt, aber das Hauptproblem ist DTClient zur Laufzeit und definieren, wie T für GetActualValue finden müssen.
Danke allen.
Nur so verstehe ich, Sie versuchen, Typen zur Laufzeit zu durchlaufen, legen Sie sie in eine Variable, und verwenden Sie dann diese Variable als Typ-Parameter bei einem generischen Methodenaufruf? – Chris