【问题标题】:Declaration of more that one lists object at once一次列出多个对象的声明
【发布时间】:2023-03-31 15:32:01
【问题描述】:

我想知道我的代码中是否有很少的列表对象,如果我想在一行中声明所有列表是否等于在单独的行中声明:

ListA = ListB = ListC ... = new List<MyType>();

是否等于:

ListA = new List<MyType>();
ListB = new List<MyType>();
ListC = new List<MyType>();
...

我必须确定这样我不会有别名问题

【问题讨论】:

  • 这些都不是声明。它们只是赋值语句。而且,不,它们不相等。第一个创建一个新的列表对象 (new List&lt;MyType&gt;()) 并将对该新对象的引用分配给每个变量 ListAListBListC(请记住,List&lt;T&gt; 是一个引用类型 - 所有三个变量现在将引用同一个对象)。第二个示例创建三个新列表对象,并将对每个新列表的引用分配给每个变量。在这种情况下,三个变量都引用了不同的对象
  • 当您尝试示例代码并检查结果时,是什么促使您在这里提出问题?
  • @Flydog57 - 好像你正确指出了谢谢!
  • @Rufus L - 作为调查代码重构后奇怪行为的一部分。
  • 降低代码复杂度是进行重构的一个很好的理由。只是盲目地减少代码行数可能会导致错误的结果。了解值类型和引用类型之间的区别是很好的。如果您有三个 int 变量 A、B 和 C,并且您有这行代码:A=B=C=42,那么您会将三个 int 变量中的每一个都初始化为数字 42。但是,List&lt;T&gt; 是引用类型,您的第一个代码会初始化您的三个变量,以便它们都引用同一个对象(您的 new 表达式创建的对象。ListA.Add(x) 将在 ListC 中可见

标签: c# declaration


【解决方案1】:

正如 Flydog57 注释掉的那样,赋值指的是第一个示例中的同一对象, 并在第二个示例中创建新实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多