是否有变通办法,可以在从未定义泛型类型的类继承的类的构造函数中使用泛型?
我正在创建一个继承自ValidationAttribute类的新自定义属性。我想在构造函数中使用通用类型,如下所示:
DateValidationAttribute : ValidationAttribute {
public void DateValidationAttribute <TData>(Expression<Func<TData, DateTime?>> property){ ... }
}
但是,由于TData和TProperty泛型类型未被识别为泛型,因此似乎不允许这样做。另外,我无法在类定义中定义泛型,因为它是从ValidationAttribute类继承的。我得到的错误是未定义TData和TProperty。
向下传递和表达的目标,以具有强类型传递属性名称的方式。我正在编写此属性以比较类的两个属性。下面的实现是它的样子。在此之下,我希望实现看起来像这样:
Current:
public DateTime? ToDate { get; set; }
[DateValidation("ToDate")]
public DateTime? FromDate { get; set; }
Goal:
public DateTime? ToDate { get; set; }
[DateValidation(prop => prop.ToDate)]
public DateTime? FromDate { get; set; }
答案 0 :(得分:2)
在属性中不支持泛型的问题最少。属性只能具有特定的subset of types (primitives, enums, String, Type and single-dimensional arrays) as constructor arguments,不能具有lambda。因此,即使您可以使用泛型,也无法做您想做的事情。
考虑使用字符串作为构造函数参数并使用nameof()
,例如:
[DateValidation(nameof(ToDate))]
这种方法使名称与不动产名称保持同步,因此您在重构等时可以获得所需的安全性。