Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# 什么';对字节[]调用Initialize()时的结果是什么?_C#_.net - Fatal编程技术网

C# 什么';对字节[]调用Initialize()时的结果是什么?

C# 什么';对字节[]调用Initialize()时的结果是什么?,c#,.net,C#,.net,在调用Initialize()之后,上面的bytesbyte数组中的默认值是什么?all null\0?注意,它将值类型初始化为默认构造值,但如果它们是内置的,则不会。因此,在这种情况下,该方法是不可行的。但是,由于尚未提供初始值设定项(请参阅),因此在创建数组后它将被设置为0。通常,您可能不想使用此方法。从文件来看 “这种方法旨在帮助 编译器支持值类型数组; 大多数用户不需要此方法。它 不得在引用类型上使用 阵列。” 如果要将其设置为0,则无法使用此方法(因为byte是内置的)。相反,您可以使

在调用Initialize()之后,上面的
bytes
byte数组中的默认值是什么?all null\0?

注意,它将值类型初始化为默认构造值,但如果它们是内置的,则不会。因此,在这种情况下,该方法是不可行的。但是,由于尚未提供初始值设定项(请参阅),因此在创建数组后它将被设置为0。通常,您可能不想使用此方法。从文件来看

“这种方法旨在帮助 编译器支持值类型数组; 大多数用户不需要此方法。它 不得在引用类型上使用 阵列。”

如果要将其设置为0,则无法使用此方法(因为
byte
是内置的)。相反,您可以使用for循环或(如果性能很重要)类似的东西

C#永远不会让您读取未初始化的内存,除非是在不安全模式下。

根据:

通过调用值类型的默认构造函数来初始化值类型数组的每个元素

因此,在本例中,您可能认为它调用了类型为
byte
的默认构造函数,其结果将是一个填充
0
s的数组

(显示默认构造函数返回的值类型的默认值。)

然而,在同一页上有以下注意事项:

只能对具有构造函数的值类型使用此方法;但是,C#固有的值类型没有构造函数

这意味着在这种情况下,它什么也不做,因为
byte
是C#固有的值类型,因此没有构造函数。

它没有效果

byte[] bytes = new byte[100];
bytes.Initialize();

将打印4。初始化的效果不是(可能更合理)返回
default(T)
,而是调用
newt()
。如果这不起作用,它会自动失败。

默认构造函数与
default(T)
不同,因此您链接到的文档与您所说的不一致。您的“注意事项”指出您上面所说的是错误的。@Jon-谢谢,我知道这件事让我很困扰!Quote:“您只能在具有构造函数的值类型上使用此方法;但是,C#本机的值类型没有构造函数。”我只知道C++/CLI是一种支持此类值类型的语言。C#支持具有默认构造函数的值类型,但只允许您显式设置其他构造函数,默认值只能是默认的类型(我想是“默认构造函数…”)
byte[] test = new byte[100];
test[1] = 4;
test.Initialize();
Console.WriteLine(test[1]);