我在 RepositoryFactory.cs 中定義了一個名為 (GetRepositoryInstance) 的靜態方法
public class RepositoryFactory
{
public static TRepository GetRepositoryInstance<T, TRepository>() where TRepository:IRepository<T>,new()
{
return new TRepository();
}
}
所以當我試圖在另一個名為 OrganizationCommonRepository.cs 的類中實作這個方法時,它會拋出錯誤
“CS0119:'Employee' 是一種型別,在給定背景關系中無效” “CS0119:'EmployeeRepository' 是一種型別,在給定背景關系中無效”。
public class OrganizationCommonRepository:IOrganizationCommonRepository
{
IEmployeeRepository Repository = RepositoryFactory.GetRepositoryInstance(Employee, EmployeeRepository)();
public void Delete(Client ObjDeleteData)
{
throw new NotImplementedException();
}
public void Insert(Client ObjNewData)
{
throw new NotImplementedException();
}
public void Update(Client ObjUpdatedData)
{
throw new NotImplementedException();
}
}
}
我有 Employee.cs 、 EmployeeRepository.cs 和介面 IEmployeeRepository 、IRepository。
但我仍然不確定這里應該有什么問題。錯誤影像
public interface IEmployeeRepository:IRepository<Employee>
{
}
如果有人能幫我解決這個錯誤,那就太好了。
謝謝
塞爾瓦阿南德
EmployeeRepository.cs
IRepository.cs
uj5u.com熱心網友回復:
快速解決
呼叫泛型方法時,型別引數應在尖括號中傳遞,<>而不是(). 所以GetRepositoryInstancein
的呼叫OrganizationCommonRepositor應該是這樣的:
RepositoryFactory.GetRepositoryInstance<Employee, EmployeeRepository>()
錯誤說明
該錯誤表明Employee并且EmployeeRepository是型別,它們在所使用的背景關系中無效。并且錯誤不是模棱兩可的,它正確地表明了問題(我也相信它指出了這些型別使用不正確的行號)。
讓我們更仔細地看一下原始方法呼叫。
RepositoryFactory.GetRepositoryInstance(Employee, EmployeeRepository)();
從 C# 的角度來看,這個運算式等價于這個:
var func = RepositoryFactory.GetRepositoryInstance(Employee, EmployeeRepository);
func();
如您所見,C# 編譯器將第一對括號()視為方法呼叫(由于另一對括號,它又會回傳可呼叫的內容())。由于這是一個方法呼叫,C# 編譯器認為它是您傳遞給該方法的常規引數,Employee并且EmployeeRepository該方法不是通用的。而且由于引數應該是有效的物件(在運行時占用一些記憶體的東西),所以這里不允許使用型別名稱,因為它們不是運行時物件。
這就是編譯器說它們是型別并在無效背景關系中使用的原因。型別名稱的有效背景關系之一是泛型。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/439484.html
上一篇:對泛型“SomeResponse”的參考需要<...>中的引數
下一篇:Kotlin中的通用資料類
