这是一个具有三个属性的对象:
public class myClass
{
public int score { get; set; }
public string name { get; set; }
public bool isAlive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在创建了这个类的实例之后,在某些地方,我正在改变这个实例的两个或三个属性,如下所示:
targetInstance.score = 1;
targetInstance.name = "John";
targetInstance.isAlive = true;
Run Code Online (Sandbox Code Playgroud)
有没有办法使用targetInstance一次然后在某种程度上使用一些括号只是设置属性(如初始化),类似于这样:
targetInstance = { score = 1, name = "John" }
Run Code Online (Sandbox Code Playgroud)
注意:也许你建议有一个方法来获取这些并改变属性,但是当有这么多属性时它不适合.
最接近的是使用 C# 7元组解构语法:
(targetInstance.score, targetInstance.name, targetInstance.isAlive) = (1, "John", true);
Run Code Online (Sandbox Code Playgroud)
但它仍然需要重复目标变量名称,因此 Daniel Hilgarth 的答案是正确的。
您可以使用命名的默认参数编写方法,并使用命名参数来仅更新所需的参数.
例如:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样称呼它:
var o = new myClass();
o.Set(name: "Hello");
Run Code Online (Sandbox Code Playgroud)
要么
var o = new myClass();
o.Set(name: "Hello", isValid: false);
Run Code Online (Sandbox Code Playgroud)
要么
var o = new myClass();
o.Set(score: 100, isValid: false);
Run Code Online (Sandbox Code Playgroud)
您可以创建一组可链接的"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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
var o = new myClass();
o.SetName("Donald").SetIsAlive(true);
Run Code Online (Sandbox Code Playgroud)
或者像这样:
var o = new myClass()
.SetName("Bob")
.SetScore(0)
.SetIsAlive(true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |