Class 带有 switch 的声明给出警告,即 if 语句中的代码始终为 int returns true,但代码的 false 情况也有效

Class declaration with switch gives warning that code is int in if statement always returns true, but false case of code also works

使用自定义 class 时,有一个接受 int 的开关。开关然后填写 class ,其中有些情况有一个数字,有些则没有。 int 几乎可以在应用程序的任何地方取值,但有些情况下没有。当查看 newClass 时,用户需要查看哪些没有编号。下面的代码工作正常,除了有一个需要删除的警告: "The result of comparing value type newClass.num with null is true" 和 "Unreachable code detected" 声明的错误部分。

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

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");
        }
    }
}

该值被定义为 int,它是 C# 中的值类型,因此不可为 null。您可以通过将其设为 int?(即可为 null 的整数)来删除警告。或者,如果 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)修改:int num; 成为: 诠释?数;

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();
}
}