在 C# 中,调整数组大小(在本例中增加其大小)会使用默认值初始化新段 - 这可靠吗?

在 C# 中,调整数组大小(在本例中增加其大小)会使用默认值初始化新段 - 这可靠吗?

Array.Resize(ref bytes, bytes.Length + extra);

我确实看到了默认值(字节数组为 0),但是是否可以安全地将其作为所有基本类型的标准行为?在我的应用程序中,节省每一秒都是一件大事,因此我认为如果默认情况下已经可用,我可以避免不必要的循环来初始化新添加的段。

慕哥6287543
浏览 70回答 2
2回答

牧羊人nacy

是的,你可以信赖这一点。从文档(强调我的):该方法分配一个指定大小的新数组,将旧数组中的元素复制到新数组,然后用新数组替换旧数组。数组必须是一维数组。分配一个新数组保证用默认值填充它(有效地“将所有位设置为 0”),因此如果我们相信描述,整个操作的结果确实会为所有尚未复制的元素提供默认Array.Resize值来自旧数组。

慕哥9229398

是的,它是可靠的。一种看待它的方式 - 如果新的数组元素不包含默认值,它们会包含什么?该方法不会弥补值。我通常不会为框架代码编写单元测试,但这是测试预期行为的简单方法,特别是在文档让我们不确定的情况下。[TestMethod]public void Resizing_array_appends_default_values(){    var dates = new DateTime[] {DateTime.Now};    Array.Resize(ref dates, dates.Length + 1);    Assert.AreEqual(dates.Last(), default(DateTime));    var strings = new string[] { "x" };    Array.Resize(ref strings, strings.Length + 1);    Assert.IsNull(strings.Last());    var objects = new object[] { 1, "x" };    Array.Resize(ref objects, objects.Length + 1);    Assert.IsNull(objects.Last());}不用说,在运行这个单元测试后我会放弃它。我不会这么做。
打开App,查看更多内容
随时随地看视频慕课网APP