【问题标题】:How to check if int array object is empty in C#?如何在 C# 中检查 int 数组对象是否为空?
【发布时间】:2015-06-22 20:03:29
【问题描述】:

我有一个整数等级数组[5]。 我有一个循环,可以一一检查数组的对象,看看它们是否为空。 我用过:

if (grades[i] != null)

我收到一条错误消息,指出 int 对象永远不会是“null”,因此该表达式始终返回“true”。 如果不是“null”,如何检查数组中的特定对象是否为空?

非常感谢您的帮助!

【问题讨论】:

  • 定义空,int 是一个值类型,因此它不能为空,所以int 数组中的元素永远不能是null,尽管你的数组可能是null
  • 试试这个:grades[0] = null; - 编译。我想这会回答你的问题。

标签: c# arrays int


【解决方案1】:

我认为您应该像这样检查0 的默认值。

if (grades[i] != 0)

但是,如果0 在您的用例中是一个有效值并且您希望存储null(即未设置等级),那么您应该将数组声明为可空类型int。像这样。

int?[] grades

然后您可以像这样检查单个项目中的空值。

if (grades[i].HasValue )
{  
    // mean grades[i] is not null and has some int value inside it
}

【讨论】:

  • 如果可能的话,我会避免使用0 方法,因为0% 的分数可能是一个有效的分数,即使是令人沮丧的分数。任何“幻数”,如0 或-1 或任何不会像null 那样明显表示“未设置值”的东西。因此,如果您的情况允许(并且并非总是如此,对于现有数据库等),我会倾向于@Shiva 的第二个建议,即使用int?[]。
【解决方案2】:

int 不是可以为空的类型。如果您希望能够检查空 int,则必须使用可为空的 int:int?。

【讨论】:

    【解决方案3】:

    int 是一个不可为 null 的类型,而不是 null,它将具有其默认值 0。如果您想拥有一个允许空值的int 数组,您可以使用可为空的int。 int?

    你可以这样使用它

    int?[] grades = new int?[5];
    if (grades[i].HasValue) //The way to check for != null
    

    然后检索它不像传统的int那样工作的值。

    int gradeValue = grades[i].Value;
    

    【讨论】:

    • 这就像一个魅力!谢谢!使用 int 有缺点吗?如果我想检查数组中的空对象而不是 int?
    【解决方案4】:

    根据实现这个,int 应该可以为空。

    Nullabele int 数组的创建可以使用这个来完成

    int?[] grades = new int?[5];
    

    您可以使用检查是否有值

    grades[i].HasValue
    

    【讨论】:

      【解决方案5】:

      我会考虑创建一个验证器类。上面的代码也应该适用于可空类型。

      public class ArrayObjectValidator<T>
      {
      public ArrayObjectValidator(T[] array)
      {
          this.array = array;
      }
      
      private T[] array { get; set; }
      
      public bool ValidateIndex(int index)
      {
          bool result = false;
      
          if (array != null && array.Length > 0)
          {
              result = CheckItemAt(index);
          }
      
          return result;
      }
      
      private bool CheckItemAt(int index)
      {
          return index >= 0 && index < array.Length && NullControl(index);
      }
      
      private bool NullControl(int index)
      {
          return array[index] != null && array[index] is T;
      }
      }
      

      你可以像下面这样使用它;

      int[] integerArray = new int[10]={1,2,3,4,5,6,7,8,9,0};
      ArrayObjectValidator<int> intArrayObjValidator = new ArrayObjectValidator<int>(integerArray);
      bool isItemAtIndexFiveNullOrEmpty = integerArray.ValidateIndex(5);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多