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

C#:如何向已存入List的匿名对象添加新属性Start?

解决方案:给DataList对象动态添加属性

你的核心问题是匿名类型的属性是只读的,没法在创建后再添加或修改属性。下面提供几种可行的实现方式,按推荐程度排序:

1. 定义实体类(最推荐,类型安全)

直接创建一个包含所有需要属性的类,既能修改属性值,又能保证类型安全,方便后续维护。

// 先定义对应的数据实体类
public class DataItem
{
    public object Value { get; set; }
    public DateTime Time { get; set; } // 根据实际类型调整,比如string/long等
    public object Start { get; set; }
}

// 修改原有代码逻辑
public List<DataItem> DataList = new List<DataItem>();

if(somecondition)
{     
    var newItem = new DataItem { Value = Value, Time = time };
    DataList.Add(newItem);
}

if(somecondition)  
{
    // 确保列表中有元素再赋值
    if (DataList.Count > 0)
    {
        DataList[0].Start = start;
    }
}

后续使用时,直接通过DataList[0].Value/Time/Start访问即可,没有类型转换问题。

2. 使用ExpandoObject(动态类型,快速原型)

如果不想提前定义类,可以用ExpandoObject实现动态属性添加,代价是失去编译时类型检查,适合临时场景。

public List<dynamic> DataList = new List<dynamic>();

if(somecondition)
{     
    dynamic newItem = new ExpandoObject();
    newItem.Value = Value;
    newItem.Time = time;
    DataList.Add(newItem);
}

if(somecondition)  
{
    if (DataList.Count > 0)
    {
        DataList[0].Start = start;
    }
}

注意:使用dynamic类型时,属性名称拼写错误只会在运行时抛出异常,需要额外注意。

3. 提前合并条件,一次性创建对象

如果两个条件的判断可以提前完成,直接根据条件组合创建对应的匿名类型对象,避免后续修改。

public List<object> DataList = new List<object>();

bool needValueAndTime = somecondition;
bool needStart = somecondition;

if (needValueAndTime)
{     
    if (needStart)
    {
        DataList.Add(new { Value = Value, Time = time, Start = start });
    }
    else
    {
        DataList.Add(new { Value = Value, Time = time });
    }
}

这种方式适合条件判断顺序不影响逻辑的场景,代码更简洁,但灵活性稍差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:13:12