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

自定义属性能否传递多个属性名参数并获取对应值?

问题描述

我有一个从数据库查询填充数据的视图模型(view model),部分属性被分配了自定义属性。目前我在自定义属性中传递了它所分配的属性的名称,但还想传入另一个属性以获取其值,从而将这两项信息传递到另一个界面。

代码示例:

public int Id {get; set;}

[TestAttribute(nameof(Id), nameof(Name))]
public string Name {get;set;}

请问这是否可行?我知道如何用自定义验证属性实现,但找不到普通自定义属性的相关方法,因此怀疑这不可行。

可行方案说明

当然可行,核心是在反射读取自定义属性的时候,结合视图模型实例来获取目标属性的值。

步骤拆解

  • 定义自定义属性
    先让TestAttribute支持接收两个属性名称参数:

    [AttributeUsage(AttributeTargets.Property)]
    public class TestAttribute : Attribute
    {
        public string RelatedPropertyName { get; }
        public string CurrentPropertyName { get; }
    
        public TestAttribute(string relatedPropertyName, string currentPropertyName)
        {
            RelatedPropertyName = relatedPropertyName;
            CurrentPropertyName = currentPropertyName;
        }
    }
    
  • 读取属性并获取对应值
    当需要从视图模型实例中提取信息时,通过反射找到带TestAttribute的属性,再根据属性名称获取对应的值:

    public static (string CurrentPropValue, object RelatedPropValue) GetAttributeValues<T>(T model) where T : class
    {
        var props = typeof(T).GetProperties();
        foreach (var prop in props)
        {
            var testAttr = prop.GetCustomAttribute<TestAttribute>();
            if (testAttr != null)
            {
                // 获取当前属性的值
                var currentValue = prop.GetValue(model)?.ToString();
                // 获取关联属性的值
                var relatedProp = typeof(T).GetProperty(testAttr.RelatedPropertyName);
                var relatedValue = relatedProp?.GetValue(model);
                return (currentValue, relatedValue);
            }
        }
        return (null, null);
    }
    
  • 使用示例
    假设你的视图模型实例是var vm = new YourViewModel { Id = 1, Name = "TestName" };,调用上述方法就能拿到Name的值和对应的Id值,直接传递到其他界面即可。

注意事项

  • 反射操作要做好空值判断,防止因属性不存在或值为null引发异常
  • 如果视图模型中有多个带TestAttribute的属性,需要调整逻辑来处理批量场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:01:02