У меня есть интерфейс, называемый IAuditable следующим образом:Passing типа класса для универсального метода во время выполнения
public interface IAuditable
{
string AuditSummary
{
get;
}
string AuditDetails
{
get;
}
}
и два шаблонных метода в классе AuditTrail следующим образом:
public T GetActualOldValue<T>() where T : IAuditable
{
return FromXElement<T>(OldValue);
}
public T GetActualNewValue<T>() where T : IAuditable
{
return FromXElement<T>(NewValue);
}
, а также у меня есть один недвижимость для возвращения Резюме аудита, получив класс во время выполнения следующим образом:
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 "";
}
}
Как вы знаете, мы можем найти класс во время выполнения в конкретной библиотеке, Обратите внимание: я не хочу вызывать общий метод во время выполнения, просто хочу вызвать общий метод с основанием, другими словами, как я могу передать конкретный класс GetActualNewValue < ...>(), как T,
AuditTrail auditTrail = AuditTrail.GetAuditTrail(76);
string summmary = auditTrail.GetActualOldValue<DTClient>().AuditSummary;
string details = auditTrail.GetActualOldValue<DTClient>().AuditDetails;
Этот код работать отлично, но основная проблема заключается в DTClient должны найти во время выполнения и определить, как T для GetActualValue.
Спасибо всем.
Именно поэтому я понимаю, что вы пытаетесь перебирать типы во время выполнения, помещать их в переменную, а затем использовать эту переменную в качестве параметра типа при вызове общего метода? – Chris