You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6中反射POCO类创建实例时CS0118错误的修复咨询

修复CS0118错误的解决方案

错误原因

CS0118错误是因为你试图将运行时动态获取的类型(entityType)作为编译时泛型方法的类型参数使用。GetInstance<T>是编译时确定类型的泛型方法,无法直接接受运行时才明确的类型参数。

修复步骤

直接使用ServiceLocator.Current.GetInstance的非泛型重载版本,传入你已经通过MakeGenericType创建好的泛型仓储类型repositoryType即可:

var entityType = Assembly.Load("system.domain").GetTypes().Where(a => a.Name == "AccountType").FirstOrDefault();
var repositoryType = typeof(infra.IRepository<>).MakeGenericType(entityType);
// 使用非泛型重载获取实例,避免编译时类型参数错误
var r = ServiceLocator.Current.GetInstance(repositoryType);

后续类型处理

如果需要对获取到的仓储实例进行操作,由于其类型是动态的,有两种常见处理方式:

  • 若你的仓储接口有一个非泛型的基接口(比如IRepository),可以将r转换为该基接口类型:
    var repository = r as IRepository;
    
  • 若不需要强类型约束,可使用dynamic类型:
    dynamic repository = r;
    // 直接调用仓储方法,如 repository.GetAll();
    

内容的提问来源于stack exchange,提问作者denli8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:22:05