如何将List <object>转换为唯一ID </object>

时间:2012-08-07 13:40:42

标签: c# list

  

可能重复:
  Good GetHashCode() override for List of Foo objects

我有List Objects,对象有ID,文件名,状态(枚举器),DateStamp,UserId。 使用Linq我使用List过滤UserId并将其发送到网络应用。

我需要为过滤结果获取某种Unique Id并在下次比较它以检测当前用户的更改。如果为当前用户或现有对象的属性添加的新对象已更改Unique Id应该不同。

我尝试使用下面的代码来获取Hash Code,但是对于每个myList对象,哈希代码都是不同的,即使对象和对象属性是相同的。有什么想法吗?

myList= _queueList.GetItems(p => p.User.Id == userId)
                  .OrderByDescending(p => p.DateStamp)
                  .ToList();

myList.GetHashCode()

2 个答案:

答案 0 :(得分:1)

var uniqueId = string.Join(",", myList.Select(x=>x.Id.ToString()).ToArray());

如果字符串很长,你可以生成一个md5或sha1并返回它。

答案 1 :(得分:1)

你可以利用这样的内置加密:

string hash = Convert.ToBase64String(
    new SHA1CryptoServiceProvider().ComputeHash(
        Encoding.UTF8.GetBytes(
            string.Join(":", myList.Select(obj => obj.Id.ToString()).ToArray()
        )));

我将Convert.ToBase64String()设置为对网络友好(请注意:如果您有许多记录,结果字符串可能会变得很长!)