在返回新对象 C# 时,如何根据不同属性的值将属性分配给值?

How to assign a property to a value depending on the value of a different property when returning a new object C#?

提问人:Mary 提问时间:7/24/2023 最后编辑:Mark SeemannMary 更新时间:7/25/2023 访问量:54

问:

我有一个 C# 项目。我有以下类:

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

然后,在我的一个业务逻辑方法中,我返回一个 类型的新对象 ,但问题是设置属性,例如 或者我需要调用一个不同的逻辑来获取 和 基于该属性。但是,由于返回一个新的 MyClass 对象,我无法在将值分配给其他属性时引用属性,这里有一个代码片段,其中包含我的意思的注释:MyClassInfoNameInfoNameId

public MyClass GetNewMyClassObject(List<int> ids)
{
    return new MyClass
    {
         Id = GetCurrentId(ids),
         Info = GetInfoFromId(?),//CAN'T PASS "Id" as a parameter here, it doesnt exist 
                                 // in the context so I have
                                 //to call GetCurrentId(ids) to pass the Id to GetInfoFromId() again!
    
         Name = GetNameFromId(?)
    }
}
C# 对象 OOP 返回 分配

评论

3赞 Ralf 7/24/2023
写一个真正的构造函数?还是为 Info 和 Name 实现真正的 getters?
2赞 Jonathan Dodds 7/24/2023
在 of 之前调用并将返回值分配给局部变量。然后在对象初始化中使用该局部变量。GetCurrentId(ids)newMyClass

答:

2赞 rotabor 7/24/2023 #1
public MyClass GetNewMyClassObject(List<int> ids)
{
    var id = GetCurrentId(ids);
    return new MyClass
    {
         Id = id,
         Info = GetInfoFromId(id),
         Name = GetNameFromId(id)
    }
}
2赞 Jonathan Dodds 7/25/2023 #2

根据我之前的评论:

在 MyClass 的 new 之前调用 GetCurrentId(ids),并将返回值分配给局部变量。然后在对象初始化中使用该局部变量。

例如:

public MyClass GetNewMyClassObject(List<int> ids)
{
    int id = GetCurrentId(ids);
    return new MyClass
    {
         Id = id,
         Info = GetInfoFromId(id),
         Name = GetNameFromId(id)
    }
}
0赞 Ed'ka 7/25/2023 #3

在 C# 8 中,具有单个 var 模式开关表达式可用于声明共享绑定变量,例如:

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