C#中的警告CS0120、CS0176、CS0183、CS0618、CS0649、CS8600、CS8601、CS8602、CS8604、CS8625及处理

目录

一、CS0120

二、CS0176

1.解决前

2.解决后

3.解决办法

三、CS0183

四、CS0618

五、CS8600

六、CS8602

七、CS8622

1. 解决前:

2. 解决后:

3.解决方法:

八、CS8604和CS8625

九、CS0649

十、CS8601


一、CS0120

严重性

代码

说明

项目

文件

禁止显示状态

错误

CS0120

对象引用对于非静态的字段、方法或属性“Program.CreateXmlFromDatabase()”是必需的

10_2

E:\C#_TM\chapter15\10_2\10_2\Program.cs

31

活动

static void Main(string[] args)
{CreateXmlFromDatabase();
}

        解决办法有两种:

  • 将引用的方法new一个对象出来。
  • 将引用的方法改成static静态方法,或者引用对应版本的方法。

二、CS0176

严重性

代码

说明

项目

文件

禁止显示状态

错误

CS0176

无法使用实例引用来访问成员“Students.SubscribeToRing(SchoolRing)”;请改用类型名来限定它

09_1

E:\C#_TM\chapter17\09_1\Program.cs

13

活动

1.解决前

static void Main(string[] args)
{SchoolRing sr = new();                       //创建学校铃声类的对象Students student = new();student.SubscribeToRing(sr);          		 //订阅铃声Console.Write("请输入打铃参数(1:表示打上课铃;2:表示打下课铃):");sr.Jow(Convert.ToInt32(Console.ReadLine())); //事件只能由发布者触发Console.ReadLine();
}

2.解决后

static void Main(string[] args)
{SchoolRing sr = new();                         //创建学校铃声类的对象Students.SubscribeToRing(sr);                  //订阅铃声Console.Write("请输入打铃参数(1:表示打上课铃;2:表示打下课铃):");sr.Jow(Convert.ToInt32(Console.ReadLine()));   //事件只能由发布者触发Console.ReadLine();
}

3.解决办法

        用类代替实例,这个是静态方法,需要直接使用类名使用,无需创建实例。

三、CS0183

        给定表达式始终为所提供的(“类型”)类型

        如果条件语句的计算结果始终为 true,则不需要条件语句。 当尝试使用 is 运算符评估类型时,会出现此警告。 如果计算结果是值类型,则不需要进行检查。

        is操作符只考虑引用转换、装箱转换和取消装箱转换。下面的程序都会发生编译时错误(CTE):已知表达式将始终是 true 或始终是 false。

int i = 0;                  //声明整型变量i
object obj = i;             //把值类型转换为引用类型,装箱操作解除CS0183
bool vi = obj is int;       //is只能用于引用转换、装箱转换和取消装箱转换
bool result = vi;          	//判断i是否为整型,警告IDE0150
Console.WriteLine(result);  //输出结果
Console.ReadLine();

        解除办法:对is操作的变量进行装箱操作,然后is操作装箱后的变量。

四、CS0618

        “string.Copy(string)”已过时:“This API should not be used to create mutable strings. See https://go.microsoft.com/fwlink/?linkid=2084035 for alternatives.”

        解除CS0618:在Main()方法前添加[Obsolete]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Test15
{class Program{[Obsolete]                      //添加,以解除CS0618static void Main(string[] args){if (args is null)           //解除IDE0060{throw new ArgumentNullException(nameof(args));}string stra = "AI时代";		//声明一个字符串变量stra并初始化string strb;				//声明一个字符串变量strb//使用String类的Copy方法,复制字符串stra并赋值给strbstrb = String.Copy(stra);   //String.Copy(string)已过时,CS0618Console.WriteLine(strb);	//输出字符串strbConsole.ReadLine();}}
}

五、CS8600

        将 null 文字或可能的 null 值转换为不可为 null 的类型。

  • 用string?解除CS8600

        string? name = Console.ReadLine(); //解除CS8600

  • 用??string.Empty解除CS8600

        string str = Console.ReadLine() ?? string.Empty; //解除CS8600

  • 用var解除CS8600

        var name = Console.ReadLine(); //解除CS8600

        为了参考和进一步研究,您收到此错误是因为您在项目中启用了可为空的引用类型docs.microsoft.com/en-us/dotnet/csharp/nullable-references。 Console.ReadLine 返回一个可以为空的字符串 (string?),您尝试将其分配给一个不可为空的字符串变量。

六、CS8602

严重性

代码

说明

项目

文件

禁止显示状态

警告

CS8602

解引用可能出现空引用。

10_3

C:\Users\YCZN_MT\Desktop\测试1\10_3\10_3\Program.cs

118

活动

        若要删除这些警告,需要在取消引用之前添加代码,将该变量的“null 状态”更改为“不为 null”。 集合初始值设定项警告可能更难以发现。 初始化表达式向集合添加元素时,编译器检测到该集合可能为 null。

void WriteMessageLength(string? message)
{if (message is not null)					    //if()解除CS8602{Console.WriteLine(message.Length);	        //CS8602}
}void LogPerson(Person person) 
{ Console.WriteLine(person.MiddleName.Length); 	//警告CS8602Console.WriteLine(person.MiddleName!.Length); 	//没有警告 
}

         这个 ! 运算符其实就是关闭了编译器的空检查。

七、CS8622

严重性

代码

说明

项目

文件

禁止显示状态

警告

CS8622

“void Students.SchoolJow(object sender, EventArgs e)”的参数“sender”类型中引用类型的为 Null 性与目标委托“EventHandler”不匹配(可能是由于为 Null 性特性)。

09_1

E:\C#_TM\chapter17\09_1\Program.cs

55

活动

1. 解决前:

public static void SchoolJow(object sender, EventArgs e)
{if (((RingEventArgs)e).RingKind == 2)          //打了下课铃{Console.WriteLine("同学们开始课间休息!");}else if (((RingEventArgs)e).RingKind == 1)     //打了上课铃{Console.WriteLine("同学们开始认真学习!");}
}

2. 解决后:

public static void SchoolJow(object? sender, EventArgs e)
{略
}

3.解决方法:

        在提示里的object后面加一个?

八、CS8604和CS8625

“int int.Parse(string s)”中的形参“s”可能传入 null 引用实参。
用??string.Empty解除CS8604
int year = Int32.Parse(str?? string.Empty);				//解除CS8604
用if语句解除CS8604
string str = Console.ReadLine() ?? string.Empty;    	//获取用户输入的年份
if (str != null)                                		//解决CS8604
{
int year = Int32.Parse(str);     						//将输入的年份转换成int类型
//计算输入的年份是否为闰年
bool isleapyear = ((year % 400) == 0) || (((year % 4) == 0) && ((year % 100) != 0));
//利用条件运算符输入“是”或者“不是”
string yesno = isleapyear ? "是" : "不是";
Console.WriteLine("{0}年{1}闰年", year, yesno);			//输出结果
Console.ReadLine();
}
double d = double.Parse(Console.ReadLine() ?? string.Empty);//解除CS8604
或者在文件中增加#nullable disable也解除CS8604。

九、CS0649

严重性

代码

说明

项目

文件

禁止显示状态

警告

CS0649

从未对字段“Form1.columnHeader1”赋值,字段将一直保持其默认值 null

06

C:\Users\YCZN_MT\Desktop\测试1\06\06\Form1.cs

10

        private System.ComponentModel.IContainer components=null;

        将赋予初始值null即可。

十、CS8601

严重性

代码

说明

项目

文件

禁止显示状态

警告

CS8601

可能的 null 引用赋值。

06

C:\Users\YCZN_MT\Desktop\测试1\06\06\Form1.cs

54

活动

//解决之前:
private readonly ListView? listView1;
private readonly ColumnHeader? columnHeader1;
private readonly ColumnHeader? columnHeader2;
private readonly ColumnHeader? columnHeader3;
private readonly ColumnHeader? columnHeader4;listView1 = new ListView();{listView1.Columns.AddRange([columnHeader1,columnHeader2,columnHeader3,columnHeader4]);//解决之后:
private readonly ListView? listView1;
private readonly ColumnHeader? columnHeader1;
private readonly ColumnHeader? columnHeader2;
private readonly ColumnHeader? columnHeader3;
private readonly ColumnHeader? columnHeader4;
columnHeader1 = new ColumnHeader();
{columnHeader1.Text = "文件名";columnHeader1.Width = 70;
}
columnHeader2 = new ColumnHeader();
{columnHeader2.Text = "路径";columnHeader2.Width = 140;
}
columnHeader3 = new ColumnHeader();
{columnHeader3.Text = "大小";columnHeader3.Width = 40;
}
columnHeader4 = new ColumnHeader();
{columnHeader4.Text = "创建日期";columnHeader4.Width = 60;
}listView1 = new ListView();{listView1.Columns.AddRange([columnHeader1,columnHeader2,columnHeader3,columnHeader4]);//解决办法:给出现的警告的参数定义并实例化,不让参数为null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法萌新闯力扣】:回文链表

力扣题目:回文链表 开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦!那从现在起,我的算法题更新会按照算法村的给的路线更新,更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知…

pandas教程:Techniques for Method Chaining 方法链接的技巧

文章目录 12.3 Techniques for Method Chaining(方法链接的技巧)1 The pipe Method(pipe方法) 12.3 Techniques for Method Chaining(方法链接的技巧) 对序列进行转换的时候,我们会发现会创建很…

操作系统的中断与异常(408常考点)

为了进行核心态和用户态两种状态的切换,引入了中断机制。 中断是计算机系统中的一种事件,它会打断CPU当前正在执行的程序,转而执行另一个程序或者执行特定的处理程序。中断可以来自外部设备(如键盘、鼠标、网络等)、软…

1072 Gas Station (最短路径同时求最短路,最长路,总路径)

题意:给定几处居民住所与几处预选加油站点,求离最近的居民住所最远且所有居民都在该站点服务区内的加油站点,如果有多个,则选择平均距离最小的,再有多个,选择序号最小的。 思路:刚开始不知道未…

振南技术干货集:FFT 你知道?那数字相敏检波 DPSD 呢?(1)

注解目录 1 、DPSD 的基础知识 1.1 应用模型 1.2 原理推导 1.3 硬件 PSD (相敏检波,就是从繁乱复杂的信号中将我们关心的信号检出来,同时对相位敏感。 数学原理,逃不掉的,硬着头皮看吧。) 2 、DPSD …

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用,我们需要形成电阻器颜色代码系统以便能够识别…

LuatOS-SOC接口文档(air780E)--repl - “读取-求值-输出” 循环

示例 --[[ 本功能支持的模块及对应的端口 模块/芯片 端口 波特率及其他参数 Air101/Air103 UART0 921600 8 None 1 Air105 UART0 1500000 8 None 1 ESP32C3 UART0 921600 8 None 1 -- 注意, 简约版(无CH343)不支持 ESP32C2 …

Java 注解在 Android 中的使用场景

Java 元注解有 5 种,常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别,有三种: RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中,并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…

力扣104. 二叉树的最大深度

目录 1.解题思路2.代码实现 1.解题思路 如果我们知道了左子树和右子树的最大深度,那么该二叉树的最大深度即为大的深度加一,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言&#x…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录,如有错误,请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条,无论你拖拽滚动条,选中滚动条之后按键盘…

Doris的PROPERTIES与ENGINE(九)

接上篇----------Doris分区与分桶 在建表语句的最后 PROPERTIES 中,可以指定以下两个参数: replication_num 每个 Tablet 的副本数量。默认为 3,建议保持默认即可。在建表语句中,所有 Partition 中的 Tablet 副本数量统一指定。…

【论文阅读】TACAN:控制器局域网中通过隐蔽通道的发送器认证

文章目录 摘要一、引言二、相关工作三、系统和对手模型3.1 系统模型对手模型 四、TACAN4.1 TACAN 架构4.2 发送方认证协议4.3 基于IAT的隐蔽通道4.4 基于偏移的隐蔽通道(本节公式格式暂未整理)4.5 基于LSB的隐蔽通道 摘要 如今,汽车系统与现…

一个GPU版本的遗传算法迭代xgboost最优参数的示例,这里用的是自定义损失函数

一个简单的遗传算法迭代xgboost最优参数的示例,这里用的是自定义损失函数 import pandas as pd import numpy as np import xgboost as xgb from sko.GA import GA from sklearn.model_selection import train_test_split from sklearn.linear_model import Logisti…

vscode Markdown 预览样式美化多方案推荐

优雅的使用 vscode写 Markdown,预览样式美化 1 介绍 我已经习惯使用 vscode 写 markdown。不是很喜欢他的 markdown 样式,尤其是代码块高亮的样式。当然用 vscode 大家基本上都会选择安装一个Markdown-preview-enhanced的插件,这个插件的确…

SpringBoot定时任务报错Unexpected error occurred in scheduled task原因及其解决方法(亲测有效)

问题 spring boot项目在线上一直正常运行没有错误,然后今天发生了报错,如图 这是一个定时器错误,发生这个报错 主要有两个原因 定时器编写的有错误Scheduled注解方式级别高于资源注入级别,导致了资源注入失败 以下是我的代码 …

单片机学习4——中断的概念

中断的概念: CPU在处理A事件的时候,发生了B事件,请求CPU迅速去处理。(中断产生) CPU暂时中断当前的工作,转去处理B事件。(中断响应和中断服务) 待CPU将B事件处理完毕后&#xff0…

【物联网开发】、【小程序蓝牙通讯数据校验】JS CRC-16-MODBUS 验证 高位在前地位在后;JS异或校验;16进制字符串和float互转

1.CRC校验 /*计算CRC-16/MODBUS校验位高低位*/ function calculateCRC16Modbus(dataHexString) {const dataBytes [];for (let i 0; i < dataHexString.length; i 2) {dataBytes.push(parseInt(dataHexString.substr(i, 2), 16));}let crc 0xFFFF;const polynomial 0x…

【数据结构初阶(5)】链式队列的基本操作实现

文章目录 队列的定义初始化队列队尾入队列队头出队列取队头元素取队尾元素获取队列有效元素个数判断队空销毁队列 因为队列比较简单&#xff0c;关于队列的概念就不过多赘述了&#xff0c;本文只讲链队的基本操作实现 队列的定义 定义队列结点结构 链队中的每个结点都应该包…

windows安装mysql5.7.26

解压mysql5.7.26文件夹拷贝到c:下 添加系统环境变量C:\mysql-5.7.26\bin cmd管理员打开终端,进入C:\mysql-5.7.26\bin 运行mysqld --initialize&#xff0c;生成data目录的文件。 在安装目录下创建my.ini文件&#xff0c;点击编辑&#xff0c;配置以下信息&#xff1a; 设置my…

Go 数字类型

一、数字类型 1、Golang 数据类型介绍 Go 语言中数据类型分为&#xff1a;基本数据类型和复合数据类型基本数据类型有&#xff1a; 整型、浮点型、布尔型、字符串复合数据类型有&#xff1a; 数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 2、…