【问题标题】:use comparison operators continuous in c#在c#中使用连续的比较运算符
【发布时间】:2021-03-28 15:57:06
【问题描述】:

你好,我的名字是 parsa,我是一名 c# 程序员,我想使用连续的比较运算符,例如假设我们有三个变量,分别命名为 V1、V2、V3

            Random rnd = new Random();
            int V1 = rnd.Next(1,5), V2 = rnd.Next(1, 5), V3 = rnd.Next(1, 5);

它们中的每一个都等于 1 到 4 之间的随机数,那么我们想看看它们是否相等,它们是否等于 3?我们必须使用这段代码

    if(V1 == V2 && V1 == V3 && V1 == 3)
        //body

如果我想像这样使用它,这将给我一个错误!

    if(V1 == V2 == V3 == 3)
        //body

我可以像我写的代码那样使用它吗?

【问题讨论】:

  • 创建一个 IComparable 类,您可以在其中创建一个自定义的 CompareTo() 方法来检查值是否相等:docs.microsoft.com/en-us/dotnet/api/…
  • @AlphaDelta 建议的“优势”是一年后阅读您的代码的人不会知道它在做什么。编写非惯用代码是个坏主意。坚持清晰易读
  • C# 有规则。如果您评估V1 == V2 == V3 == 3,首先发生的事情是V1 == V2 被评估为truefalse(即布尔值)之一。然后(V1 == V2) == V3 被评估。括号中的内容已经被确定为布尔值,因此您会得到一个比较布尔值和 V3 类型的表达式。您的错误(您应该在帖子中包含)很可能表明您不能在布尔值和 V3 的任何类型之间使用 ==
  • @DavidG :我试图根据我的经验对问题给出真正的答案。不关闭帖子是因为新手不知道如何提出正确的问题。如果人们只是关闭问题,你希望新手如何学习。
  • @jdweng 不,我是说您的 cmets 几乎总是不正确的。这与结束问题无关。

标签: c# if-statement comparison comparison-operators


【解决方案1】:

很遗憾,您不能在 C# 中执行此操作;但是,如果您将一个变量与多个模式(如常量模式或类型模式)进行比较,(自 C# 9.0 起)您可以编写

if(v is a or b or c)

请注意,您可以在 Visual Studio 16.8 或更高版本中使用 C# 9.0。它是与 .NET 5 一起引入的。您可以通过手动将 LangVersion 标记添加到 *.csproj 来使用旧框架版本中的大部分 C# 9.0 功能(包括模式匹配)。

<PropertyGroup>
    ...
    <LangVersion>latest</LangVersion>
</PropertyGroup>

另请参阅:What's new in C# 9.0 / Pattern matching enhancements (Microsoft Docs)

【讨论】:

  • 它在 C# 9.0 中运行。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 2017-03-28
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多