0

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

是否有可用于测试类的 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");
        }
    }
}
4

2 回答 2

2

该值被定义为intC# 中的值类型,因此不可为空。您可以通过将其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");
}
于 2016-07-14T20:18:59.417 回答
0

您不能检查带有 null 的变量,除非它可以为空(如字符串)

所以:1)修改:int num;是:int?数量;

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();
}
}
于 2016-07-14T22:21:01.977 回答