繁体   English   中英

将泛型引入到从非泛型类继承的构造函数中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM