Я зову общий метод с двумя различными классами, как показано ниже:свойство класса не доступны универсальный метод C#
FillDataPointsInOrder<Metrics>(dataPoints.Where(O => O.SortOrder != null).OrderBy(O => O.SortOrder));
FillDataPointsInOrder<Metric>(angieStatsCmp.GetDataColumns());
private void FillDataPointsInOrder<T>(IEnumerable<T> dataPoints)
{
foreach (T dpoint in dataPoints)
{
if (!dpoint.IsPhone)
FillDrp(this.EmailDrp, dpoint.Name, dpoint.MetricId.ToString(), dpoint.VName);
if (dpoint.IsPhone && this.IsPhoneShop)
FillDrp(this.PhoneDrp, dpoint.Name, dpoint.MetricId.ToString(), dpoint.VName);
}
}
в «FillDataPointsInOrder» метод я получаю ошибку компиляции:
'T' does not contain a definition for 'IsPhone' and no extension method 'IsPhone' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)
Те же ошибки для свойств Name, MetricId и VName. Не знаете, почему T не имеет доступа к свойствам показателей и метрик. Если я удалю код из универсального метода и напишу его непосредственно в foreach поверх dataPoints, он работает нормально.
Может кто-нибудь сообщить, что здесь не так?
Хорошая точка. В примере, приведенном в вопросе, нет очевидной потребности в универсальном методе, в первую очередь, если существует соответствующий интерфейс или базовый класс. – Xiaofu