C#新操作bug?

标签 c# constructor c#-6.0

public class ListTest
{
    public List<int> MyList;
    public ListTest()
    {
        MyList = new List<int> { 1, 2, 3 };
    }
}

var listTest = new ListTest()
{
    MyList = {4,5,6}
};

你知道listTest.MyList的值吗?

它将是 {1,2,3,4,5,6}

enter image description

谁能解释一下??

最佳答案

这不是错误,而是 { ... } 初始化语法在 C# 中的工作方式的结果。

该语法适用于任何具有 Add() 方法的集合类型。它所做的只是用对 Add() 方法的调用序列替换大括号中的序列。

在您的示例中,您首先在构造函数中使用前三个元素初始化值。然后,稍后当您将 { 4, 5, 6 } 分配给该属性时,它会使用这些值再次调用 Add()

如果要清除之前的内容,需要用new操作符赋值,像这样:

var listTest = new ListTest()
{
    MyList = new List<int> {4,5,6}
};

通过包含 new 运算符,您将获得一个全新的对象以及 Add() 值。

关于C#新操作bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45778875/

相关文章:

c# - 如何将表从存储过程检索到数据表?

c# - "The type ' 系统.Windows.Forms.TreeNodeCollection ' has no constructors defined"

c# - 如何将巨大的 .csv 导入 sql 数据库?

c# - 读取包含 unicode 字符的文件

c++ - 在 C++ 中通过重载构造函数初始化未知类型的变量

objective-c - Objective-C 构造函数中的必需参数

C++ 派生类错误

c# - 将 "nameof"关键字与仅设置属性一起使用

条件语句中的 C# 6.0 空运算符

C# 6 空传播当对象为空时设置什么值