我遇到了一些奇怪/意外的行为,其中Guid.ToString()Linq表达式返回的结果与Guid.ToString()foreach循环中的结果不同.
方法是做什么的:
有问题的方法是简单地获取一个对象,然后从原始对象创建一个新的视图模型.我工作的公司已经决定不允许在视图模型上使用Guid,因为我们的一个较旧的JSON序列化程序有一个错误,其中Guid没有正确序列化.
问题/意外结果:
在调试/测试我的方法时,我发现我创建的Linq表达式返回了一个奇怪的结果.将我的Guid转换为其字符串表示形式时,结果会自动大写.我一开始并不认为这是Linq表达式,但是一旦我将逻辑转换为foreach循环,我得到了一个较低的字符串表示我的Guid.
示例代码:
请注意,lookupList(ID1,ID2,ID3)的属性类型都是Guid类型,NewClass上的属性都是string类型.
Linq表达:
List<NewClass> returnList = lookupList.Select(i => new NewClass {
Property1 = i.ID1.ToString(),
Property2 = i.ID2.ToString(),
Property3 = i.ID3.ToString(),
.....
}).ToList();
Run Code Online (Sandbox Code Playgroud)
返回:
{
Property1=7081C549-64D6-458E-A693-0D2C9C47D183
Property2=06DD6A59-D339-4E15-89EA-48803DBA271E
Property3=9A876EDD-3B79-C27E-1680-E0820A0CD6EC
}
Run Code Online (Sandbox Code Playgroud)
Foreach循环:
var returnList = new List<NewClass>();
foreach (var item in lookupList)
{
returnList.Add(new NewClass
{
Property1 = item.ID1.ToString(),
Property2 = item.ID2.ToString(),
Property3 = item.ID3.ToString(),
.....
});
}
Run Code Online (Sandbox Code Playgroud)
返回:
{
Property1=7081c549-64d6-458e-a693-0d2c9c47d183
Property2=06dd6a59-d339-4e15-89ea-48803dba271e
Property3=9a876edd-3b79-c27e-1680-e0820a0cd6ec
}
Run Code Online (Sandbox Code Playgroud)
问题:
为什么会发生这种情况并且是预期的行为?我希望Linq表达式和foreach循环在.ToString()应用于我的Guid 时返回相同的结果,但不知何故它不是.我还检查.ToString() …