2
我收到編譯時錯誤,我的方法調用有一些無效的參數。抽象類調用通用方法與此 - 不會編譯
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();
}
EDIT 2
因爲T應該只是一個子類,我認爲類簽名應該改變是通用的,所以迫使子類設置它。然後通過this
不會是這樣的黑客。
嗯,我需要我的EntityBase類是EntityBase? –
我在我的帖子中添加了一個編輯,它顯示了一種讓它編譯的方法。這感覺就像一個黑客。但是你的回答回答了我的問題,所以我會接受它。謝謝! –
@BobHorn:只有'this' * *實際上是'T'的一個實例才能使用'as'。不知道更多關於你想要達到的目標,很難知道最佳解決方案。 –