这两个Guids有何不同?

时间:2016-07-14 14:45:24

标签: c# linq guid

我有一个奇怪的错误。我将数据与guid配对,以便稍后识别它们并更改原始数据。

我能够将真正复杂的问题重新创建为一个我可以在这里提出的更简单的问题,因此我为什么要使用字符串作为数据。以此为例:

  List<string> testList = new List<string>(new[] { "haha", "wit" });
  var list1 = testList.Select(x => new KeyValuePair<Guid, string>(Guid.NewGuid(), x));
  var list2 = list1.Select(x => new KeyValuePair<Guid, string>(x.Key, x.Value));
  Guid xGuid = list1.First().Key;
  Guid yGuid = list2.First().Key;

  System.Diagnostics.Debug.Print(xGuid.ToString());
  System.Diagnostics.Debug.Print(yGuid.ToString());
  System.Diagnostics.Debugger.Break();

只需拿走一段代码然后运行即可。在visual studio的输出窗口中,您应该看到两个guid,就像这两个:

35ac8c6a-928c-46a9-a614-9d35c2427219
d2175358-85f8-4467-be02-34932f2f4804

注意:它们不一样

现在我的问题是:

如何,为什么他们甚至不同?

我在这里创建了一个guid:

var list1 = testList.Select(x => new KeyValuePair<Guid, string>(Guid.NewGuid(), x));

然后才被复制:

var list2 = list1.Select(x => new KeyValuePair<Guid, string>(x.Key, x.Value));

那为什么这些不同?

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我想你已经遇到了Linq的魔力。试试这个:

var list1 = (your code).ToList()
var list2 = (your code).ToList()

并查看您是否获得相同的值。每次在代码中执行Linq的Select,每次都会产生一个新的guid。我认为实际的术语是投影和实现。