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

C# 继承接口实现泛型方法时无法访问参数类成员如何解决

问题原因

你代码中的SaveExistingData<Brand>里的Brand不是你预先定义的业务实体类,而是该方法的泛型参数占位符的命名,等同于你把常见的泛型占位符T改成了Brand,编译器无法识别这个占位符包含brandId等成员,因此抛出错误。同时你原有写法直接拼接brandId到SQL语句中存在SQL注入风险。

正确实现方案

推荐将泛型定义在接口层面,每个Adapter对应处理固定的实体类型,适配你的业务场景:

1. 修改接口定义

public interface IDataAdapter<T> {        
    void SaveExistingData(T t);
}

2. 重写BrandAdapter实现

public class BrandAdapter : IDataAdapter<Brand> {       
    public void SaveExistingData(Brand updatedBrand) {
        // 改为全参数化写法,避免SQL注入风险,Dapper会自动匹配实体属性和SQL参数
        string sql = "UPDATE tblBrands SET brandName=@brandName WHERE brandID=@brandId";
        using (var connection = Helper.CreateDatabaseConnection()) {
            connection.Execute(sql, updatedBrand);
        }
    }
}

3. 其余Adapter适配

剩余的ProductionAdapter、SupplyAdapter、OrderAdapter分别按照对应业务实体类实现对应泛型接口即可,例如ProductionAdapter写法:

public class ProductionAdapter : IDataAdapter<Production> {       
    public void SaveExistingData(Production updatedProduction) {
        // 对应Production的业务逻辑
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:06:03