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

如何实现支持传入对象属性列表的函数参数?

解决方案

要实现带智能提示的属性选择功能,核心是利用泛型+强类型委托/匿名类型,让编译器提供属性提示,同时避免硬编码属性名。以下是两种贴合需求的实现方式:

方式1:直接接收匿名对象参数

这种方式和你给出的理想示例完全匹配,调用时直接传入包含目标属性的匿名对象,编译器会自动推断类型并提供智能提示:

class Cases {
    // 泛型方法接收任意匿名类型(或自定义投影类型)
    public void DoStuff<TProjection>(TProjection projection) where TProjection : class {
        // 通过反射获取投影对象的属性信息
        var properties = typeof(TProjection).GetProperties();
        foreach (var prop in properties) {
            string propName = prop.Name;
            object propValue = prop.GetValue(projection);
            // 这里替换为你的业务逻辑,比如记录属性、生成SQL片段等
            Console.WriteLine($"属性名:{propName},值:{propValue}");
        }
    }

    public string Caption { get; set; }
    public int ID_Case { get; set; }
    public int ID_Type { get; set; }
}

调用示例

var c = new Cases { Caption = "客户投诉案例", ID_Type = 2 };
// 输入c.时会自动弹出Cases的所有属性,智能提示生效
c.DoStuff(new { c.Caption, c.ID_Type });

方式2:用Lambda选择器(更贴近EF Select的用法)

如果需要更灵活的属性转换或逻辑处理,可以用Func<TSource, TProjection>作为参数,这和EF Select的用法一致,智能提示同样完整:

class Cases {
    public void DoStuff<TProjection>(Func<Cases, TProjection> projectionSelector) where TProjection : class {
        // 利用当前实例生成投影对象
        var projection = projectionSelector(this);
        // 后续反射处理逻辑和方式1一致
        var properties = typeof(TProjection).GetProperties();
        foreach (var prop in properties) {
            string propName = prop.Name;
            object propValue = prop.GetValue(projection);
            Console.WriteLine($"属性名:{propName},值:{propValue}");
        }
    }

    public string Caption { get; set; }
    public int ID_Case { get; set; }
    public int ID_Type { get; set; }
}

调用示例

var c = new Cases { Caption = "客户投诉案例", ID_Type = 2 };
// 输入x.时会弹出Cases的所有属性,还可以对属性做转换
c.DoStuff(x => new { x.Caption, 大写标题 = x.Caption.ToUpper(), x.ID_Type });

核心优势

  • 完全依赖强类型,输入属性时有完整的智能提示,避免拼写错误。
  • 无需使用nameof硬编码属性名,代码更易维护。
  • 泛型自动推断类型,无需手动指定,使用体验流畅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:35:23