gpt4 book ai didi

c# - 在一个命令中更改对象的多个属性

转载 作者:行者123 更新时间:2023-11-30 18:56:09 27 4
gpt4 key购买 nike

这是一个具有三个属性的对象:

public class myClass
{
public int score { get; set; }
public string name { get; set; }
public bool isAlive { get; set; }
}

创建此类的实例后,在某些地方,我会像这样更改此实例的两个或三个属性:

targetInstance.score = 1;
targetInstance.name = "John";
targetInstance.isAlive = true;

有没有什么方法可以使用一次targetInstance,然后使用一些括号来设置属性(比如初始化),类似于这样:

targetInstance = { score = 1, name = "John" }

注意:也许你建议有一个方法来接受这些并改变属性,但是当有这么多属性时它不适合。

最佳答案

命名参数

您可以编写一个带有命名的默认参数的方法,并使用命名参数仅更新您想要的参数。

例如:

public class myClass
{
public int score { get; set; }
public string name { get; set; }
public bool isAlive { get; set; }

public void Set(int score = -1, string name = null, bool? isAlive = null)
{
if (score != -1) this.score = score;
if (name != null) this.name = name;
if (isAlive.HasValue) this.isAlive = isAlive.Value;
}
}

你可以这样调用它:

var o = new myClass();
o.Set(name: "Hello");

或者

var o = new myClass();
o.Set(name: "Hello", isValid: false);

或者

var o = new myClass();
o.Set(score: 100, isValid: false);

语法流畅

您可以创建一组可链接的“setter 方法”,如下所示:

public class myClass
{
public int score { get; set; }
public string name { get; set; }
public bool isAlive { get; set; }

public myClass SetScore(int score)
{
this.score = score;
return this;
}

public myClass SetName(string name)
{
this.name = name;
return this;
}

public myClass SetIsAlive(bool isAlive)
{
this.isAlive = isAlive;
return this;
}
}

然后像这样使用它:

var o = new myClass();
o.SetName("Donald").SetIsAlive(true);

或者像这样:

var o = new myClass()
.SetName("Bob")
.SetScore(0)
.SetIsAlive(true);

关于c# - 在一个命令中更改对象的多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53801224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com