[英]C# struct default values
我有一个方法接受一个包含许多具有基本数据类型的字段的结构。
我想传递大部分默认值,但有一些调整,但我知道结构声明中的基本字段不能包含默认值声明,例如struct S{ int a = 42 }
。
现在它是这样的:
OptionsStruct options = OptionStructDefaults;
options.itemA = 2;
options.itemQ = 2; // ... itemB, itemR, itemAZ12, etc.
SetOptions(options);
但是,将OptionsStructDefaults
信息与OptionsStruct
声明分开感觉很奇怪......
感觉好像有办法做这样的事情?
SetOptions( new OptionsStruct(){
itemA = 2,
itemQ = 2,
// ...all other fields have default values.
})
或者:
SetOptions( new OptionsStruct(useDefaults:true){
itemA = 2,
itemQ = 2,
});
或者,是否有理由说明为什么单独指定的结构默认值最终是做事的方式?
struct
s 的限制是您不能拥有默认构造函数。 所以你不能为字段和属性设置默认值(因为它被编译到默认构造函数中)。
但是你可以有一个非默认构造函数,即一个带参数的构造函数。
所以你可以有一个这样的struct
:
public struct OptionsStruct
{
public int ItemA { get; set; }
public int ItemQ { get; set; }
public OptionsStruct(bool useDefaults)
{
if (useDefaults)
{
ItemA = 2;
ItemQ = 2;
}
else
{
ItemA = 0;
ItemQ = 0;
}
}
}
并像你写的那样使用它:
SetOptions(new OptionsStruct(useDefaults:true)
{
ItemA = 3,
// ...all other fields have default values.
});
另一种方法是使用一个static
方法来设置默认值:
public struct OptionsStruct
{
public int ItemA { get; set; }
public int ItemQ { get; set; }
public static OptionsStruct GetDefault()
{
return new OptionsStruct()
{
ItemA = 2;
ItemQ = 2;
};
}
}
并像这样使用它:
var options = OptionsStruct.GetDefault();
options.ItemA = 3;
SetOptions(options);
如果您的属性数量不是太多,您还可以使用带有可选参数的构造函数:
public struct OptionsStruct
{
public int ItemA { get; set; }
public int ItemQ { get; set; }
public OptionsStruct(int itemA = 2, int itemQ = 2)
{
ItemA = itemA;
ItemQ = itemQ;
}
}
但是只有在给它至少一个参数时才会调用它:
var options1 = new OptionsStruct(); // The "default" constructor is called, so everythng will be 0.
Console.WriteLine(options1.ItemA); // 0
Console.WriteLine(options1.ItemQ); // 0
var options2 = new OptionsStruct(3); // Everything works as expected.
Console.WriteLine(options1.ItemA); // 3
Console.WriteLine(options1.ItemQ); // 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.