小编Mr *_*kle的帖子

为什么Guid.ToString在Linq中返回大写字符串?

我遇到了一些奇怪/意外的行为,其中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() …

.net c#

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

标签 统计

.net ×1

c# ×1