【问题标题】:Using int? as a member variable vs. a local variable [duplicate]使用整数?作为成员变量与局部变量[重复]
【发布时间】:2015-03-11 05:10:38
【问题描述】:

可能是一个非常快速的解决方案,但我正在 Visual Studio 中处理一个项目,其中程序读取数字文本文件,然后为它们计算某些统计数据。

我最初启动了两个成员变量来表示最小值和最大值。

  private int? mMax;
  private int? mMin;

然后,该方法会将文件中的当前数字与那些成员变量进行比较,并相应地进行更改。但是,我需要能够检查这些是否为空。我不能简单地将它们设置为默认值 0,因为还涉及负数。

这是我的实现,带有

int a = //current number in the file

if (mMax == null && mMin == null)
{
    mMax = a;
    mMin = a;
}
else
{
    //compare and assign min & max accordingly
}

这一切都很好,花花公子,直到我意识到最终用户在完成第一个文件后可以通过方法体运行另一个文件。这意味着成员变量在方法的第一次运行时就已经设置好了。

因此,我没有制作 min 和 max 成员变量,而是将它们制作为方法范围内的简单变量。

但是,当运行此代码时:

int? max;
int? min;
if (max == null && min == null)
{
    ...
}

我收到错误“使用未分配的局部变量 'max' 和 'min'”。

谁能告诉我为什么会这样? 我打算取消分配这些变量,但显然我这样做有问题。为什么它作为成员变量可以完全正常工作而不是局部变量?

【问题讨论】:

标签: c# null int nullable


【解决方案1】:

试试这个

int? mMax = null;
int? mMin = null;

【讨论】:

  • 宾果游戏。 int? max; 声明了最大值,但尚未为其分配任何值 - 你甚至无法将其与 null 进行比较。这会导致编译器告诉你它是未分配的。
  • 谢谢!结束了工作。抱歉,如果这是一个愚蠢的问题,但为什么当我没有设置它的值时它会作为成员变量工作?除非另有说明,否则成员变量是否自动设置为 null?
  • @DanielCole 实例变量如果未初始化,将被赋予默认值。局部变量在使用前必须赋值。
【解决方案2】:

你可以试试这个:

int? max = null;
int? min = null;

为什么会出现此编译错误。

它尝试在变量 a 被赋值之前使用它。管理明确分配的规则在here 中定义。

【讨论】:

  • 在这种情况下,条件将始终为真。由于您在 if 语句之前分配 null,因此无需检查 null 值的 min 和 max。
  • @KiranVarsani 它只是演示代码 sn-p 以消除 OP 在这里询问的编译错误。
  • @KiranVarsani 我刚刚删除的任何方式,如果为了避免混淆。
  • 看起来更好... :)
猜你喜欢
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2021-11-11
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多