带有 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");
}
}
}
该
值定义为 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();
}
}