[英]Introducing Generic Types to a constructor inheriting from non-Generic class
是否有变通办法,可以在从未定义泛型类型的类继承的类的构造函数中使用泛型?
我正在创建一个继承自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; }
在属性中不支持泛型的问题最少。 属性只能具有特定类型的子集(基元,枚举,字符串,类型和一维数组)作为构造函数参数 ,而不是lambda。 因此,即使您可以使用泛型,也无法做您想做的事情。
考虑使用字符串作为构造函数参数,并使用nameof()
,例如:
[DateValidation(nameof(ToDate))]
这种方法使名称与不动产名称保持同步,因此在进行重构等操作时可以获得所需的安全性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.