Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#结构默认值_C# - Fatal编程技术网

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)感觉很好!事实上,它看起来可能有点笨重,有很多选择,但可能更糟。我不知道你可以在结构上有静态方法!这对于支持不同的预制选项集来说真的很方便!