【问题标题】:C# i have List<object> with object values internally changed and now i want to removeC# 我有 List<object> 内部更改了对象值,现在我想删除
【发布时间】:2011-04-17 09:42:06
【问题描述】:

C# 我有内部更改对象值的列表,现在我想删除该对象,我的意思是

class Strength {
  public int energy;
  public Strength(int energy) {
    this.energy = energy;
  }
  public void increment(){
    this.energy++;
  }
}

List<Strength> strengthList = new List<Strength>();

Strength strength = new Strength(10);

strengthList.Add(strength);

strength.increment();

strengthList.Remove(strength);

它会从强度列表中删除对象强度吗?

提前感谢大家的帮助

【问题讨论】:

  • 我的意思是它会有一些参考线,所以它会删除我想要删除的正确对象吗?还是我不太了解?请帮忙
  • 简而言之,是的,它会消除力量

标签: c# list add


【解决方案1】:

你想知道的是C#如何处理equality的对象。

在您的情况下,它将删除此对象,因为它们具有相同的引用。您也可以在您的类中覆盖此行为,以便它能够比较此类的值。

要添加:List.Remove 使用 EqualityComparer.Default。如果对象实现它,这将使用IEquatable,或者将回退到标准Object.EqualsObject.GetHashCode

【讨论】:

  • 并添加,当您覆盖等于和哈希码时,此时调用增量然后尝试从列表中删除不会从列表中删除“强度”
  • 没有。它将删除它。大多数对 Equals 的覆盖首先检查引用标识。在这种情况下,它会比较强度场,这也会导致值相等。
  • 当然会删除它,列表中的对象与您要删除的对象相同,因此在这种情况下使用引用比较或值比较无关紧要.重要的问题是,如果您使用值比较,它是否也会删除任何其他对象?例如,如果您添加一个值为 1 和一个值为 2,然后将第一个增加到值为 2,然后要求列表将其删除。然后它将两者都删除(假设 List 使用值比较,我没有费心检查。)
  • 是的。 Remove 将删除第一个元素,即相等。因此,如果您实现了值相等,并且另一个具有相同值的元素,那么它将删除它。
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 2019-03-10
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多