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

如何为不可编辑的Metadata类添加属性?求可行解决方案

无法编辑Metadata类时添加新属性的解决办法

以下是几种无需修改原类源码就能扩展属性的可行方案:

1. 子类继承扩展

如果原Metadata类不是密封类,直接继承它并新增属性:

public class ExtendedMetadata : Metadata
{
    public string CustomProperty { get; set; }
}

之后用ExtendedMetadata替代原类实例即可,适用于允许替换类型的场景。

2. 组合包装类

若原类是密封类无法继承,创建包装类包裹原实例,同时添加新属性:

public class MetadataWrapper
{
    public Metadata Original { get; }
    public string CustomProperty { get; set; }

    public MetadataWrapper(Metadata original)
    {
        Original = original;
    }
}

通过包装类既能访问原类的所有成员,又能使用新增属性。

3. 字典存储额外属性

用字典以原实例为键,存储额外属性值,无需修改或包装原类:

// 建议使用弱引用字典避免内存泄漏
private static readonly WeakReferenceDictionary<Metadata, string> _extraProps = new();

// 设置属性
_extraProps.Add(metadataInstance, "自定义值");
// 获取属性
if (_extraProps.TryGetValue(metadataInstance, out var value))
{
    // 使用获取到的value
}

注意要处理好实例引用的唯一性,推荐用弱引用字典防止内存泄漏。

4. 扩展方法模拟属性

结合扩展方法和字典,模拟属性的调用方式:

public static class MetadataExtensions
{
    private static readonly Dictionary<Metadata, string> _customPropStore = new();

    public static void SetCustomProperty(this Metadata metadata, string value)
    {
        _customPropStore[metadata] = value;
    }

    public static string GetCustomProperty(this Metadata metadata)
    {
        _customPropStore.TryGetValue(metadata, out var value);
        return value;
    }
}

使用时直接通过实例调用:

metadataInstance.SetCustomProperty("测试值");
var propValue = metadataInstance.GetCustomProperty();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:55:15