Я создал метод для возврата значения по умолчанию из любого класса. Я пытаюсь использовать Reflection
, чтобы получить значение, но оно не работает.Reflection не получает пользовательский класс в C#
Вот класс со значением по умолчанию, что я хочу (StoredProcedure
):
namespace Services.Data.Report
{
public class PayrollReport
{
public string FullName { get; set; }
public DateTime WeekStart { get; set; }
public decimal PerDiem { get; set; }
public decimal StPay { get; set; }
public decimal OtPay { get; set; }
public decimal StraightHours { get; set; }
public decimal OverTimeHours { get; set; }
[DefaultValue("report_payrollSummary")]
public string StoredProcedure { get; set; }
}
}
У меня есть этот метод, который позволит мне передать имя класса, и мы надеемся получить требуемое значение поля:
namespace Services
{
public class DynamicReportService : IDynamicReportService
{
public string GetDynamicReport(string className)
{
System.Reflection.Assembly assem = typeof(DynamicReportService).Assembly;
var t = assem.GetType(className);
var storedProcedure = t?.GetField("StoredProcedure").ToString();
return storedProcedure;
}
}
}
Я также попытался это, но получить те же результаты:
var t = Type.GetType(className);
Проблема в том, что t
никогда не устанавливается.
Я пытаюсь вызвать его с чем-то вроде этого:
var storedProc = _dynamicReportService.GetDynamicReport("Services.Data.Report.PayrollReport");
Есть еще один способ передать Class
по имени и быть в состоянии получить доступ к полям, методы и другие свойства?
Вы передаете полное имя сборки класса в классеName? это должно быть «namespace.classname, assemblyname», поэтому «Services.Data.Report.PayrollReport, Services.Data.Report», если пространство имен соответствует сборке. Для проверки вы можете запустить это в классе и захватить вывод: this.GetType(). AssemblyQualifiedName – jimpaine
Что вы ожидаете получить при вызове 'GetDynamicReport'? В вашем примере вы ожидаете получить строку со значением «report_payrollSummary»? – RVid
Если вы хотите получить значение 'Attribute' в' Property', вам нужно будет получить свойство (это не поле) и использовать отражение для этого атрибута. 'ToString()' не даст вам этого. См. Например http://stackoverflow.com/q/6637679/224370 –