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

C#中如何在泛型方法里使用泛型列表的属性

解决方案

你遇到的问题根源是泛型参数T没有约束,编译器无法确认所有T类型对象都包含那四个公共属性。通过接口约束就能完美解决这个问题,同时实现代码复用的目标。

步骤1:定义统一接口

创建一个包含所需四个属性的接口,所有需要传入该泛型方法的类都要实现这个接口:

public interface IExternalArticleInfo
{
    Guid ExternalArticleId { get; }
    Guid ExternalCategoryId { get; }
    Guid ExternalSubCategoryId { get; }
    Guid ExternalBrandId { get; }
}

步骤2:让目标类实现接口

确保你的主产品类、文章类、分类文章类都实现上述接口,示例如下:

// 文章类示例
public class Article : IExternalArticleInfo
{
    public Guid ExternalArticleId { get; set; }
    public Guid ExternalCategoryId { get; set; }
    public Guid ExternalSubCategoryId { get; set; }
    public Guid ExternalBrandId { get; set; }
    // 类的其他自定义属性...
}

// 主产品类示例
public class MainProduct : IExternalArticleInfo
{
    public Guid ExternalArticleId { get; set; }
    public Guid ExternalCategoryId { get; set; }
    public Guid ExternalSubCategoryId { get; set; }
    public Guid ExternalBrandId { get; set; }
    // 类的其他自定义属性...
}

步骤3:修改泛型方法添加约束

在泛型方法的T参数后添加where约束,指定T必须实现IExternalArticleInfo接口:

private async Task<List<T>> GetArticlesPolicyAsync<T>(List<T> articles, Guid externalCompanyId, CancellationToken cancellationToken)
    where T : IExternalArticleInfo
{
    var externalArticleIds = articles.Select(x => x.ExternalArticleId).ToArray();
    var externalCategoryIds = articles.Select(x => x.ExternalCategoryId).ToArray();
    var externalSubCategoryIds = articles.Select(x => x.ExternalSubCategoryId).ToArray();
    var externalBrandIds = articles.Select(x => x.ExternalBrandId).ToArray();

    var pricePolicyItems = new List<ExternalPricePolicyItemGetDto>();
    // 后续业务逻辑...

    return articles;
}

这样编译器就能确认T类型对象必然包含指定的四个属性,报错会消失,同时你可以复用同一个方法处理所有实现了该接口的类。

内容的提问来源于stack exchange,提问作者Roxy'Pro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:20:01