我遇到编译时错误,我的方法调用有一些无效的参数。
public abstract class EntityBase
{
public virtual List<ValidationResult> Validate<T>()
{
// This line causes the error:
var validationResults = this.ValidateEntity<T>(this, true).ToList();
}
protected IEnumerable<ValidationResult> ValidateEntity<T>(T entity, bool ignoreNullViolations)
{
// Code here
}
}
这门课是抽象的。那应该没问题。我尝试在方法签名中指定T的类型,但这没有帮助。为什么不编译?我无法将this
传递给期望T参数的方法吗?
编辑 - 可能的解决方案:
public virtual List<ValidationResult> Validate<T>() where T : class
{
var validationResults = this.ValidateEntity<T>(this as T, true).ToList();
}
编辑2
由于T应该只是一个子类,我认为类签名应该更改为泛型,以便强制子类设置它。然后通过this
就不会那么黑了。
答案 0 :(得分:5)
宣布您的ValidateEntity
方法,使第一个参数的类型为T
。
现在看看你是怎么称呼的:
var validationResults = this.ValidateEntity<T>(this, true).ToList();
您是否试图将this
隐式转换为T
- 是什么让您认为应该工作?
假设我打电话:
foo.Validate<string>();
那会尝试将this
传递给一个有效期望string
的方法 - 这显然不会起作用,因为this
是对{的某个具体子类的实例的引用{1}} - 不对字符串的引用。