gpt4 book ai didi

visual-studio-2010 - 如何检测是否是 Guid?位于列表

转载 作者:行者123 更新时间:2023-12-04 18:11:40 26 4
gpt4 key购买 nike

使用以下代码:

Guid? x = null;
List<Guid?> y = new List<Guid?>();
y.Add(x);

我希望以下代码返回 true y.Contains(x);但它返回错误。

所以这是一个两部分的问题。
  • 为什么当列表中有 x 时它返回 false?
  • 我将如何遍历 Guid?列表检查是否为空 Guid?Guid?值(value)在列表中?
  • 最佳答案

    让我们检查您的代码。没有语法糖,它真正说的是:

    Nullable<Guid> x = new Nullable<Guid>(new Guid());
    List<Nullable<Guid>> y = new List<Nullable<Guid>>();
    y.Add(x);

    解释
    Nullable<>实际上是一个 struct ,所以它不是真正的 null ;只有它的 Value属性(property)有机会成为 null ,但由于其基础类型( Guid )也是 struct , 什么都没有在您的列表中确实是 null .

    那我为什么要解释呢?好吧,到时候 List<>.Contains()做它的神奇,两者结合的条件 structEquals()方法确定您的空 Guid s 不相等。

    The nullable equality operator that takes two nullable guids is applicable in this situation, will be called, and will always return false.



    Source

    我们如何解决它?

    自从拥有 Nullable在您的解决方案中非常没用,我会重构您的代码以摆脱它。 Guid取而代之的是一个方便的花花公子 Empty我们可以使用的属性:
    Guid x = Guid.Empty;
    List<Guid> y = new List<Guid>();
    y.Add(x);

    Console.WriteLine(y.Contains(x)); // True
    Console.WriteLine(y.Contains(Guid.Empty)); // True

    请参阅上述内容: Ideone

    再次查看 this post来自 Eric Lippert 的更多信息。

    更新:

    如果您正在寻找所有 null (或空)列表中的项目,也许检查项目 x 更有意义在列表中 x.HasValuefalse :
    var myList = new List<Guid>();
    ... /* add to myList */
    var theEmpties = myList.Where(x => x == Guid.Empty);

    关于visual-studio-2010 - 如何检测是否是 Guid?位于列表<Guid?>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537914/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com