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

C#返回新对象时,如何依据其他属性值为属性赋值?

解决C#对象初始化器中无法引用同一对象其他属性的问题

针对你遇到的在对象初始化器里没法引用刚设置的Id属性的问题,有几种实用的解决方式:

1. 提前计算并存储Id值

最直接的方案是先把Id计算出来存到变量里,后续初始化属性时直接复用这个变量,避免重复调用GetCurrentId(ids):

public MyClass GetNewMyClassObject(List<int> ids)
{
    var currentId = GetCurrentId(ids);
    return new MyClass
    {
         Id = currentId,
         Info = GetInfoFromId(currentId),
         Name = GetNameFromId(currentId)
    };
}

这种方式简单直观,还能避免多次调用GetCurrentId可能带来的性能问题或不一致结果(如果这个方法不是纯函数的话)。

2. 给MyClass添加构造函数

如果这类初始化逻辑比较常用,可以给MyClass添加一个接收Id的构造函数,在构造函数内部完成Info和Name的赋值:

public class MyClass
{
    public int Id { get; set; }
    public string Info { get; set; }
    public string Name { get; set; }

    public MyClass(int id)
    {
        Id = id;
        Info = GetInfoFromId(id);
        Name = GetNameFromId(id);
    }

    // 保留无参构造函数(如果业务需要的话)
    public MyClass() {}
}

之后业务方法里就可以直接这样调用:

public MyClass GetNewMyClassObject(List<int> ids)
{
    var currentId = GetCurrentId(ids);
    return new MyClass(currentId);
}

这种方式把属性初始化的逻辑封装到类内部,符合封装原则,适合需要多次创建这类对象的场景。

3. 先创建对象再分步赋值

如果不想提前存变量也不想修改类结构,可以先创建对象并设置Id,之后再给Info和Name赋值:

public MyClass GetNewMyClassObject(List<int> ids)
{
    var myObj = new MyClass();
    myObj.Id = GetCurrentId(ids);
    myObj.Info = GetInfoFromId(myObj.Id);
    myObj.Name = GetNameFromId(myObj.Id);
    return myObj;
}

这种方式虽然代码稍显繁琐,但不需要额外的变量或修改类,适合临时场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:23:16