【问题标题】:Merge conditional expression C#合并条件表达式 C#
【发布时间】:2021-09-13 08:12:41
【问题描述】:

我需要我的代码使用条件表达式,但不知道如何正确解决这个问题。

这是“旧”代码:

private int PageNumber
{
    get
    {
        if (ViewState["PageNumber"] != null)
        {
            return (int)ViewState["PageNumber"];
        }
        return 0;
    }
    set
    {
        ViewState["PageNumber"] = value;
    }
}

以下是“新”代码。我试图修改“旧”代码,但在“get”中得到“Merge conditional expression”:

private int PageNumber
{
    get => ViewState["PageNumber"] != null ? (int) ViewState["PageNumber"] : 0;
    set => ViewState["PageNumber"] = value;
}

“get”如何使用条件表达式?

【问题讨论】:

  • 你读过docs吗?
  • “合并条件表达式”听起来像 Resharper 建议改进。可能有一种方法可以告诉它进行改进:我猜它会做类似(ViewState["PageNumber"] as int?) ?? 0(int?)ViewState["PageNumber"] ?? 0
  • 如果 Resharper 提出了一些建议,那么告诉它为您实施该建议......

标签: c# resharper


【解决方案1】:

很遗憾,ReSharper 没有提出解决方案。但它比您的解决方案更喜欢以下内容。

private int PageNumber
{
    get => (int)(ViewState["PageNumber"] ?? 0);
    set => ViewState["PageNumber"] = value;
}

【讨论】:

  • 我想你的意思是(int?) 那里?
  • 谢谢,这个解决方案有效: private int PageNumber { get => (int)(ViewState["PageNumber"] ?? 0); set => ViewState["PageNumber"] = value; }
  • @canton7 不,它永远不会为空。如果 ViewState["PageNumber"] 为 null,则由于 null 合并运算符而返回 0。 docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
  • 啊,没有发现括号是那样的。这比 (int?)ViewState["PageNumber"] ?? 0 IMO 更令人困惑,因为此版本避免将 0 转换为 int,但您可以选择
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多