当使用自定义类时,有一个接受int的开关。然后,开关填充类,其中某些情况下有num,而有些情况下没有。int几乎可以在应用程序中的任何位置范围内,但在某些情况下没有。当查看newClass时,用户需要查看哪些没有编号。下面的代码运行良好,只是对于语句的false部分,有一条警告需要删除:“将值类型newClass.num
与null进行比较的结果是true
”和“检测到无法访问的代码”。
是否有可用于测试类的nullReferenced部分的方法或最佳实践?这种情况叫什么(例如,不可空引用,nullReference测试) (...because我不知道要搜索什么)?
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");
}
}
}
发布于 2016-07-14 20:18:59
该值被定义为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");
}
发布于 2016-07-14 22:21:02
你不能用null检查变量,除非它是可以为空的(如字符串)
因此: 1)将: int num;修改为: 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();
}
}
https://stackoverflow.com/questions/38383486
复制