有没有办法一次性更改C#对象值...在一行?
因此,如果我有一个Result
string msg
和bool isPositive
的课程,并且我已经在var result = new Result();
之前的某处调用了构造函数,我可以通过不输入以某种方式更改值: / p>
result.msg = "xxxxxx";
result.bool = false;
但是做一些像实例化时你可以做的事情:
result { msg = "", bool = true}
我知道我可以通过以下方式再次实例化一个新对象来实现:
var result = new Result() { msg = "", bool = true}
但这不是我的问题:)
答案 0 :(得分:6)
为什么不创建一种能够为你做到这一点的方法......
public void SetResult(string msg, bool flag)
{
myFlag = flag;
myMsg = msg;
}
然后你调用它:
myResult.SetResult("xxx", flase); // one line
答案 1 :(得分:4)
您可以编写一个函数来重置值。例如:
public class Result
{
...
public void ResetResult()
{
msg = "xxxxxx";
boole = false;
}
}
然后,要执行重置,
var result = new Result() { msg = "", boole = true}
//...Do whatever you want to do with result.
result.ResetResult();
//...Do whatever you want to do with the *reset* result.
答案 2 :(得分:4)
你可以制作一个二传手:
class Result
{
public string msg;
public bool boolean;
public SetValues(string message, bool boolean)
{
msg = message;
this.boolean = boolean;
}
}
然后你可以打电话:
SetValues("a string", true);
您还可以利用可选参数:
public SetValues(string message = "", bool boolean = false)
{
msg = message;
this.boolean = boolean;
}
因此,您可以在不指定任何参数的情况下调用该方法,它将作为重置:
SetValues();
但是我仍然建议使用初始化列表,因为设置一个设置多个属性的setter并不是一个好习惯,因为你可以用各种方式设置它们中的每一个,但它仍然违反了{{3} }。
答案 3 :(得分:2)
明确地,您可以在类中实现满足您需要的方法,例如:
public class Result
{
public string Property1 { get; set; }
public int Property2 { get; set; }
//directly in the instatation of the object
public Result()
{
this.Property1 = "a";
this.Property2 = 1;
}
//or explicitely within a method
public void ChangeValues()
{
this.Property1 = "a";
this.Property2 = 1;
}
//or explicitely setting the values from outside as parameters
public void ChangeValues(string property1, int property2)
{
this.Property1 = property1;
this.Property2 = property2;
}
}
Ussage:
//option 1
var result = new Result(); //values would be already set here
//option 2
var result = new Result();
result.ChangeValues(); //values would be set here
//option 3
var result = new Result();
result.ChangeValues("a",1);
您也可以通过属性进行迭代,以便为每个属性设置不同的值,但是我觉得这有点过分了
答案 4 :(得分:1)
好的,所以这非常相似 - (几乎相同)几乎 - 正如其他答案一样。
我认为我对其他答案提供了一些不同的看法 - 只是提供了一种使用public
方法调用的替代方法...
您可以定义"默认" Result
类中的属性值,使用const
蚂蚁(甚至只是普通字段)。
然后,设置属性'默认值为这些常量(或字段,以较小者为准)。
然后,当您构造一个没有初始化程序的新Result()
时,将使用这些默认值创建Result
对象。
然后,您可以使用也使用这些默认值的Reset()
函数。
在重构时,这可以证明更容易维护。
以下是如何定义Result
课程的属性和方法:
public class Result
{
private const string defaultMsg = "xxx";
private const bool defaultIsPositive = false;
public string Msg { get; set; } = defaultMsg;
public bool IsPositive { get; set; } = defaultIsPositive;
public void Reset()
{
Msg = defaultMsg;
IsPositive = defaultIsPositive;
}
}
请注意,public string Msg { get; set; } = defaultMsg;
是初始化属性的一种很好的简便方法(我认为它只能从C#6.0获得)。
另一种方法可以通过构造函数来完成,如下所示:
public Result()
{
Msg = defaultMsg;
IsPositive = defaultIsPositive;
}
然后,使用它就像创建对象一样简单,用它做任何事情;然后调用Reset()
方法:
// create a Result object with its default values
var result = new Result();
// OR
// create a Result object with some non-default values
var result = new Result { Msg = "something", IsPositive = true };
然后,使用result
对象操纵或执行您的操作。
然后,重置值:
... // do whatever with your result object
// reset the result to its default values
result.Reset();