【问题标题】:How to replace swap 2 properties for each instance inside a generic List?如何替换通用列表中每个实例的交换 2 个属性?
【发布时间】:2021-12-28 00:12:32
【问题描述】:

如何在通用列表中交换每个实例的 2 个属性。更好地解释:

对于该列表中的所有 A 实例,我希望 BInstance1 变为 BInstance2,BInstance2 变为 BInstance1:

我很确定我应该使用 Select linq 扩展方法,但我不太了解它的语法

public class A
{
    public B BInstance1 { get; set; }
    public B BInstance2 { get; set; }
}

public class B
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Created { get; set; }
}


        var aList = new List<A>();

        aList.Add(new A()
        {
            BInstance1 = new B() { Created = DateTime.Now.Add(new TimeSpan(1, 0, 0, 0)), Id = 1, Name = "B1" },
            BInstance2 = new B() { Created = DateTime.Now.Add(new TimeSpan(2, 0, 0, 0)), Id = 2, Name = "B2" }
        });

        aList.Add(new A()
        {
            BInstance1 = new B() { Created = DateTime.Now.Add(new TimeSpan(3, 0, 0, 0)), Id = 3, Name = "B3" },
            BInstance2 = new B() { Created = DateTime.Now.Add(new TimeSpan(4, 0, 0, 0)), Id = 4, Name = "B4" }
        });

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    如果您想将此逻辑封装为类的一部分。然后你可以做这样的事情

    public class A
    {
       public B BInstance1 { get; set; }
       public B BInstance2 { get; set; }
    
       // deconstruction tuple swap
       public void Swap() => (BInstance1, BInstance2) = (BInstance2, BInstance1);
    }
    

    用法

    var aList = new List<A>();
    
    aList.Add(new A()
    {
      BInstance1 = new B() { Created = DateTime.Now.Add(new TimeSpan(1, 0, 0, 0)), Id = 1, Name = "B1" },
      BInstance2 = new B() { Created = DateTime.Now.Add(new TimeSpan(2, 0, 0, 0)), Id = 2, Name = "B2" }
    });
    
    foreach (var item in aList)
      item.Swap();
    

    注意:显然,这不需要是类的一部分,它可以是扩展方法、辅助方法或任何其他变体,例如用于行

    注意 2 :如果您想要一个新分配的列表和原始对象的克隆,您将需要投影 (Select) 并手动(或通过其他方式)分别重新创建对象

    【讨论】:

    • 使用元组解构来交换属性是作弊!我们不得不使用过去美好时光的临时变量在哪里?...
    • @TheodorZoulias 它的新热点 :) 临时变量消失了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2016-07-22
    • 1970-01-01
    • 2018-04-04
    • 2012-03-15
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多