C#结构默认值
我有一个方法,它接受一个包含许多基本数据类型字段的结构 我想传递大部分默认值,但需要做一些调整,但我知道结构声明中的基本字段不能包含默认值声明,例如C#结构默认值,c#,C#,我有一个方法,它接受一个包含许多基本数据类型字段的结构 我想传递大部分默认值,但需要做一些调整,但我知道结构声明中的基本字段不能包含默认值声明,例如struct S{int a=42} 现在是这样的: OptionsStruct options = OptionStructDefaults; options.itemA = 2; options.itemQ = 2; // ... itemB, itemR, itemAZ12, etc. SetOptions(options); 然而,将op
struct S{int a=42}
现在是这样的:
OptionsStruct options = OptionStructDefaults;
options.itemA = 2;
options.itemQ = 2; // ... itemB, itemR, itemAZ12, etc.
SetOptions(options);
然而,将optionstructdefaults
信息与optionstruct
声明分开让人感觉很奇怪
感觉会有这样的方法吗
SetOptions( new OptionsStruct(){
itemA = 2,
itemQ = 2,
// ...all other fields have default values.
})
或:
或者,单独指定的结构默认值最终是解决问题的方法,这有什么原因吗 对
struct
s的限制是不能有默认的构造函数。因此,您不能为字段和属性设置默认值(因为这是编译到默认构造函数中的)
但是您可以拥有一个非默认构造函数,即接受参数的构造函数
因此,您可以有这样一个struct
:
OptionsStruct options = OptionStructDefaults;
options.itemA = 2;
options.itemQ = 2; // ... itemB, itemR, itemAZ12, etc.
SetOptions(options);
公共结构选项结构
{
公共int ItemA{get;set;}
公共int ItemQ{get;set;}
公共选项结构(bool usefaults)
{
如果(使用默认值)
{
项目a=2;
项目Q=2;
}
其他的
{
ItemA=0;
ItemQ=0;
}
}
}
并像你写的那样使用它:
SetOptions(新选项结构(使用默认值:true)
{
项目a=3,
//…所有其他字段都有默认值。
});
另一种方法是使用设置默认值的
static
方法:
公共结构选项结构
{
公共int ItemA{get;set;}
公共int ItemQ{get;set;}
公共静态选项struct GetDefault()
{
返回新选项struct()
{
项目a=2;
项目Q=2;
};
}
}
然后像这样使用它:
OptionsStruct options = OptionStructDefaults;
options.itemA = 2;
options.itemQ = 2; // ... itemB, itemR, itemAZ12, etc.
SetOptions(options);
var options=optionstruct.GetDefault();
选项A=3;
设置选项(选项);
如果属性的数量不太多,还可以使用具有可选参数的构造函数:
公共结构选项结构
{
公共int ItemA{get;set;}
公共int ItemQ{get;set;}
公共选项结构(int itemA=2,int itemQ=2)
{
ItemA=ItemA;
ItemQ=ItemQ;
}
}
但仅当您至少提供一个参数时,才会调用它:
var options1=newoptionstruct();//调用“默认”构造函数,因此所有内容都将为0。
Console.WriteLine(选项1.ItemA);//0
Console.WriteLine(选项1.ItemQ);//0
var options2=新的optionstruct(3);//一切正常。
Console.WriteLine(选项1.ItemA);//3.
Console.WriteLine(选项1.ItemQ);//2.
您能否在结构中使用一个构造函数来设置大多数默认值,但接受一些可选参数?struct options struct{public static options struct Default(int-itemA=2,int-itemB=2){return new…}
并像这样使用它:SetOptions(options-struct.Default(itemB:4))
,在示例中使用itemq
时,我想说明我想要调整-any-字段,而不仅仅是几个特定的字段。将澄清问题。啊,我曾经尝试过选项(bool defaults=true){…}
,但运气不好,我一直认为必须明确说明这一点(新选项(true)
)似乎有点可疑。具有可选参数的构造函数,允许新选项(itemQ:42)代码>感觉很好!事实上,它看起来可能有点笨重,有很多选择,但可能更糟。我不知道你可以在结构上有静态方法!这对于支持不同的预制选项集来说真的很方便!