gpt4 book ai didi

c# - 抽象类调用泛型方法 - 不会编译

转载 作者:行者123 更新时间:2023-12-02 05:25:38 24 4
gpt4 key购买 nike

我收到一个编译时错误,提示我的方法调用有一些无效参数。

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 就不是这样了。

最佳答案

您的 ValidateEntity 方法声明为第一个参数是 T 类型。

现在看看你是怎么调用它的:

var validationResults = this.ValidateEntity<T>(this, true).ToList();

您正在尝试将 this 隐式转换为 T - 为什么您认为应该 有效?

假设我调用:

foo.Validate<string>();

这将尝试将 this 传递给有效地期望 string 的方法 - 这显然行不通,因为 this 是一个引用到 EntityBase 的某个具体子类的实例 - 不是对字符串的引用。

关于c# - 抽象类调用泛型方法 - 不会编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13127315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com