メソッド呼び出しに無効な引数があるというコンパイル時エラーが発生します。
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
はそのようなハックではありません。