相关疑难解决方法(0)

重写System.Object.GetHashCode的最佳算法是什么?

在.NET GetHashCode方法中,很多地方都使用.NET 方法.特别是在快速查找集合中的项目或确定相等性时.是否有关于如何GetHashCode为我的自定义类实现覆盖的标准算法/最佳实践,因此我不会降低性能?

.net algorithm hashcode gethashcode

1389
推荐指数
14
解决办法
19万
查看次数

为什么在重写Equals方法时重写GetHashCode很重要?

鉴于以下课程

public class Foo
{
    public int FooId { get; set; }
    public string FooName { get; set; }

    public override bool Equals(object obj)
    {
        Foo fooItem = obj as Foo;

        if (fooItem == null) 
        {
           return false;
        }

        return fooItem.FooId == this.FooId;
    }

    public override int GetHashCode()
    {
        // Which is preferred?

        return base.GetHashCode();

        //return this.FooId.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经覆盖了该Equals方法,因为它Foo代表了Foos表的一行.哪个是覆盖的首选方法GetHashCode

覆盖为什么重要GetHashCode

c# overriding hashcode

1371
推荐指数
13
解决办法
35万
查看次数

比较两个复杂对象的最佳方法

我有两个像Object1和的复杂对象Object2.他们有大约5个级别的子对象.

我需要最快的方法来说明它们是否相同.

怎么可以在C#4.0中完成?

.net c#

102
推荐指数
9
解决办法
19万
查看次数

正确的方法来重写Equals()和GetHashCode()

我之前从未真正这样做过,所以我希望有人可以告诉我正确实现我的类的Except()和GetHashCode()的重写.

我正在尝试修改类,以便我可以使用LINQ Except()方法.

public class RecommendationDTO{public Guid RecommendationId { get; set; }
public Guid ProfileId { get; set; }
public Guid ReferenceId { get; set; }
public int TypeId { get; set; }
public IList<TagDTO> Tags { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime? ModifiedOn { get; set; }
public bool IsActive { get; set; }
public object ReferencedObject { get; set; }
public bool IsSystemRecommendation { get; set; }
public int VisibilityScore { get; …
Run Code Online (Sandbox Code Playgroud)

c# equality gethashcode

94
推荐指数
3
解决办法
12万
查看次数

有没有办法在Visual Studio中自动生成equals和hashcode方法

在Java中,当你想有remove从一个通用的正确对象Collectionremove()方法,你必须执行equals(Object o),并remove()可以在Eclipse中自动生成的方法.该方法的示例如下所示--->.

  1. 如何在C#中自动生成该方法(Visual Studio,我在VS2013上)?

  2. 也许没有必要让List.Remove()方法正常工作?

  3. 如果不能自动地如何参考Equals方法应该是什么样子?我的意思是它应该是什么样子.

  4. Equals()方法,即使在使用List.Remove(),如果这样你能告诉我怎么Equals()应实行以返回true,如果我们比较相同的对象(在内存地址相同)


  @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((centerPanel == null) ? 0 :          centerPanel.hashCode());
        result = prime * result + ((lowerPanel == null) ? 0 : lowerPanel.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if(this == obj)
            return true;
        if(obj …
Run Code Online (Sandbox Code Playgroud)

.net c# list visual-studio

12
推荐指数
3
解决办法
1万
查看次数

DDD实体应该通过引用还是通过ID进行比较?

当我开始使用DDD时,我Equals()在我的实体中创建了比较实体ID的方法.因此,具有相同ID的两个实体对象将被视为相等.

在某些时候我想到了这一点,并发现不同状态的两个实体不应该被认为是相等的,即使它们描述相同的事物(即具有相同的ID).所以现在我对我的实体使用引用相等.

然后,我在马克·西曼(Mark Seemann)的写作中偶然发现了这个答案

如果它们的ID彼此相等,则实体是相等的.

当然,现在,我想知道哪种方法更好.

编辑:请注意,问题在于是否同时拥有同一实体的两个实例是个好主意.我知道在大多数情况下它可能不是.

domain-driven-design equality

9
推荐指数
3
解决办法
1308
查看次数

在C#中实现DDD实体类

我现在开始使用DDD,我已经找到了一个很好的ValueObject实现,但我似乎找不到实体的任何好的实现,我想要一个通用的基本实体类型,它将具有一个ID(规范需要)和实现当前的平等操作.

什么是最优雅的解决方案?

c# oop domain-driven-design

8
推荐指数
1
解决办法
5236
查看次数

C# Linq GroupBy 方法对于匿名和非匿名类型的工作方式不同

我有一个包含 4 列的数据表,如下所示:

    private static DataSet dataSet;
    private const string tableName = "MyTable";
    private const string columnName1 = "Supplier";  //Column names
    private const string columnName2 = "Invoice";
    private const string columnName3 = "Item";
    private const string columnName4 = "Amount";
Run Code Online (Sandbox Code Playgroud)

我按供应商、发票列对表进行了分组,并使用以下 linq 查询计算了金额的总和:

    private static DataTable GroupQueryA(DataTable dataTable)
    {
        DataTable groupedTable = dataTable.AsEnumerable()
            .GroupBy(r => new { Key1 = r.Field<string>(columnName1), Key2 = r.Field<string>(columnName2) })
            .Select(g => new GroupSum
            {
                Key1 = g.Key.Key1,
                Key2 = g.Key.Key2,
                Sum = g.Sum(x => x.Field<double>(columnName4))
            }).PropertiesToDataTable<GroupSum>(); …
Run Code Online (Sandbox Code Playgroud)

c# linq group-by

4
推荐指数
1
解决办法
995
查看次数

如何覆盖没有任何数字作为字段的GetHashCode()?

所有资源显示如何覆盖Equals(object)GetHashCode()使用数字字段来实现该GetHashCode()方法:

实现Equals方法
Equals和GetHashCode的最佳策略是什么?
为什么在重写Equals方法时重写GetHashCode很重要?

但是,在我的课上,我没有任何数字字段.它是树中的节点,引用其父节点,子节点和接口作为数据:

public class Node
{
    private IInterface myInterface;
    private Node parent;
    private List<Node> children = new List<Node>();

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
        {
            return false;
        }
        var node = (Node)obj;
        return myInterface == node.myInterface;
    }

    public override int GetHashCode()
    {
        ???
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该用什么设置哈希码?

c# equality hashcode iequalitycomparer gethashcode

1
推荐指数
1
解决办法
318
查看次数