带有 switch 的类声明会警告代码在 if 语句中是 int 的,但代码的 false 大小写也有效

本文关键字:代码 int false 有效 大小写 if 声明 switch 警告 带有 语句 | 更新日期: 2023-09-27 17:56:56

使用自定义类时,有一个开关可以接收 int。 然后,开关会填写类,其中有些情况有数字,有些没有。 int 几乎可以在应用程序中的任何位置使用,但在某些情况下没有。当查看newClass时,用户需要查看哪些没有数字。 下面的代码工作正常,除了有一个警告需要删除:"将值类型 newClass.num 与 null 进行比较的结果是true"和语句的 false 部分的"检测到无法访问的代码"。

是否有可用于测试类的 nullReferenced 部分的方法或最佳实践?这种情况叫什么(即,不可为空的引用,空引用测试)(...因为我不知道要搜索什么)?

using system.generic;
using system.generic.collections;
public Class newClass{
    string name;
    int num;
    public newClass(int index){
        switch(index){
            case 1:
                num = 20;
                name = "returns true";
                break;
            case 2:
                // no num here
                name = "returns false";
            default :
                break;
        }
    }
}
public otherClass{
    newClass foo = new newClass(1);
    newClass bar = new newClass(2);
    List<newClass> newClassList = new List<newClass>();
    newClassList.add(foo);
    newClassList.add(bar);
    foreach(newClass nc in newClassList){
        if(nc.num != null){
            print("True");
        } else {
            print("False");
        }
    }
}

带有 switch 的类声明会警告代码在 if 语句中是 int 的,但代码的 false 大小写也有效

值定义为 C# 中的值类型的int,因此不可为空。您可以通过将其设为 int? 来删除警告,即可为空的整数。或者,如果方案中0不是num的可能值,请将条件更改为:

// default(int) will be 0, the default value for a C# int
if(nc.num != default(int)){
    print("True");
} else {
    print("False");
}

你不能用 null 检查变量,除非它是可空的(如字符串)

所以: 1) 修改 : 整数;成为:国际?数字;

2)删除其他

foreach (newClass nc in newClassList)
    {
        if (nc.num != null) //warning will disappear because   num is nullable
        {
            print("True");
        }
        print("False");
    }

我修改了您的代码以避免编译错误

using System.Collections.Generic;
public class newClass
{
public string name;
public int? num;
public newClass(int index)
{
    switch (index)
    {
        case 1:
            num = 20;
            name = "returns true";
            break;
        case 2:
            // no num here
            name = "returns false";
            break;
        default:
            break;
    }
}
}
public class otherClass
{
newClass foo = new newClass(1);
newClass bar = new newClass(2);
List<newClass> newClassList = new List<newClass>();
public otherClass()
{
    newClassList.Add(foo);
    newClassList.Add(bar);
    foreach (newClass nc in newClassList)
    {
        if (nc.num != null)
        {
            print("True");
        }
        print("False");
    }
}
private void print(string msg)
{
    throw new System.NotImplementedException();
}
}