【问题标题】:Avoid call by reference避免通过引用调用
【发布时间】:2014-12-22 12:52:36
【问题描述】:

我有一个包含一些对象的搜索结果列表:

SearchResults = new ObservableCollection<ViewModel<Consignor>>();

我正在尝试将此列表中的第一个对象保存到一个新变量中:

Consignor foundConsignor = consignors.First();

据我所知,这是一个引用调用。通过更改对象“foundConsignor”,我列表中的第一个对象也会更改。我怎样才能避免这种行为?我可以调用 Consignor 的构造函数并将对象或值传递给它,但我也想避免这种情况,以将复杂性保持在较低水平。

【问题讨论】:

  • 搜索创建一个对象的deep copy - 例如通过序列化/反序列化循环。

标签: c# linq linq-to-objects


【解决方案1】:

Consignor 类上实现IClonable,然后您就可以轻松地执行consignors.First().Clone() 之类的操作。

如果您的类 (Consignor) 仅包含内部类型(intcharstring 等),MemberwiseClone() 可能对您来说就足够了。但如果它包含非固有类型或引用类型,并且您想要执行成员的深层复制,则需要实现 IClonable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2016-11-06
    • 1970-01-01
    • 2014-06-10
    • 2016-09-14
    • 2018-12-03
    相关资源
    最近更新 更多