C#中的警告CS0120、CS0176、CS0183、CS0618、CS0649、CS8600、CS8601、CS8602、CS8604、CS8625、CS8618、CS0103、CS0234及处理-程序员宅基地

技术标签: C#  c#  开发语言  

目录

一、CS0120

二、CS0176

1.解决前

2.解决后

3.解决办法

三、CS0183

四、CS0618

五、CS8600

六、CS8602

七、CS8622

1. 解决前:

2. 解决后:

3.解决方法:

八、CS8604和CS8625

九、CS0649

十、CS8601

十一、CS8618

十二、CS0103

十三、CS0234


一、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]                      //添加,以解除CS0618
        static void Main(string[] args)
        {
            if (args is null)           //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }

            string stra = "AI时代";		//声明一个字符串变量stra并初始化
            string strb;				//声明一个字符串变量strb
            //使用String类的Copy方法,复制字符串stra并赋值给strb
            strb = String.Copy(stra);   //String.Copy(string)已过时,CS0618

            Console.WriteLine(strb);	//输出字符串strb
            Console.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); 	//警告CS8602
    Console.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

十一、CS8618

严重性

代码

说明

项目

文件

禁止显示状态

警告

CS8618

在退出构造函数时,不可为 null 的 字段“openFileName”必须包含非 null 值。请考虑将 字段 声明为可以为 null。

FolderBrowserDialog

E:\C#_TM\FolderBrowserDialog\FolderBrowserDialog\Form1.cs

23

活动

        private string? openFileName, folderName;

        解决办法:在提示的变量声明处,类型的后面增加一个?

十二、CS0103

严重性

代码

说明

项目

文件

禁止显示状态

错误

CS0103

当前上下文中不存在名称“MessageBox”

StartListener

C:\Users\YCZN_MT\Desktop\Chat\StartListener\Class1.cs

26

活动

        解决方法:

  • 添加:using System.Windows.Forms;
  • 并且,右侧资源管理器→引用→添加引用→找到“System Windows.Forms"并选中它,单击“确定”按钮,就将该引用项添加到当期项目中了。

十三、CS0234

严重性

代码

说明

项目

文件

禁止显示状态

错误

CS0234

命名空间“System.Windows”中不存在类型或命名空间名“Forms”(是否缺少程序集引用?)

StartListener

C:\Users\YCZN_MT\Desktop\测试1\Chat[.NET8.0]\StartListener\Class1.cs

6

活动

  • 产生原因:

新建项目为类库时,项目不会自动引用System.Windows.Forms,当我们使用命名空间System.Windows.Forms内的函数时,就会报这个错误。        

  • 解决方法:

   右键“引用”——添加引用——框架——搜索System.Windows.Forms添加即可。添加的引用版本只适用于.NET Framework 4.8,不能用于.NET     

        

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wenchm/article/details/134606735

智能推荐

IDEA创建第一个Javaweb项目包括数据库连接_idea创建javaweb项目包括数据库连接-程序员宅基地

文章浏览阅读8.2k次,点赞39次,收藏182次。本文旨在让刚入门Java的新手能够创建第一个web项目,能够对Javaweb开发有一个基本的认识和了解。本文所用工具:Intellij IDEA,可在官网下载社区版或专业版,社区版是免费的。环境:jdk 12.0.2web服务器软件:tomcat 9.0.30数据库:MySQL 8.0.18 (不需数据库只需跳过后面部分即可)Java数据库连接驱动:jdbc 8.0.18jdbc下载教..._idea创建javaweb项目包括数据库连接

数据库课程设计:简易版超市信息管理系统(Java+MySQL)_数据库超市管理系统-程序员宅基地

文章浏览阅读7.2w次,点赞35次,收藏247次。分享一个简单的Java+JDBC+MySQL数据库开发的简易版超市管理系统,完成简单的基础功能,如登录验证,进货管理,售货管理,信息查询等等,适合做课程设计呢,喜欢的小伙伴可以来看看呢实现功能:库存管理销售管理信息查询系统进货售货库存查询 进货查询 售货查询退出超市数据库进货表(顺序码,条形码,进价,采购数量,采购日期)售货表(顺序码,条形码,数量,零售价,日期时间)库存表(条形码,商品名称,库存量,生产厂商,商品规格,零售价)用户表(顺序码,用户名._数据库超市管理系统

史上最全BI知识全解,万字长文带你读懂BI-程序员宅基地

文章浏览阅读487次。这种独立的、单独的面向前端的商业智能BI分析工具,他们更多的定位是部门级和个人级的商业智能BI 分析工具,对于深层次的需要复杂数据处理、集成、建模等很多场景是无法解决的。从市场宣传和销售的角度来说,简化产品的复杂度和上手难度的宣传是没有问题的,有问题的是以一种错误的讲解、不专业的讲解最终误导企业接受了这些不正确的概念,并以这些不正确的概念来评估与规划 商业智能BI 项目的建设,没有充分预计到 商业智能BI 项目建设过程中可能会遇到的挑战与风险,最后导致项目的不成功与失败、反复建设。

华为数据湖的3大特点、6个标准、入湖流程_数据入湖的六个标准-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏22次。3大特点、6个标准、入湖流程01 数据湖的3个特点1. 逻辑统一2. 类型多样3. 原始记录02 数据入湖的6个标准1. 明确数据Owner2. 发布数据标准3. 认证数据源4. 定义数据密级5. 数据质量评估6. 元数据注册03 数据入湖方式1. 批量集成(Bulk/Batch Data Movement)2. 数据复制同步(Data Replication/Data Synchronization)3. 消息集成(Message-Oriented Movement of Data)4. 流集成(Stre_数据入湖的六个标准

12.python-详细了解PyCharm支持的4种Python Interpreter和配置方法_python interpreter:new conda environment-程序员宅基地

文章浏览阅读492次。详细了解PyCharm支持的4种Python Interpreter和配置方法_WaitFoF-程序员宅基地文章目录1. Virtualenv Environment1.1 Virtualenv Environment是什么?1.2 如何使用Virtualenv Environment?1.2.1. New environment1.2.2. Existing environment2. Conda Environment2.1 Conda Environment是什么?2.2 如何_python interpreter:new conda environment

-Webkit- Transition_webkittransitionduration-程序员宅基地

文章浏览阅读2.6k次。在CSS3中这个属性的作用是使得变化不那么生硬,达到比较平和的过渡。而实际变化的属性是需要我们自己手动去添加变化. 这个属性可以分解成多个CSS属性: (1)-webkit-transition-timing-function 可以定义动画的变化时间曲线 -webkit-transition-timing-function: ease-out ,cubic-bezier(x1,y1,x2,y2_webkittransitionduration

随便推点

数字IC/FPGA面试宝典--经典60道例题详解_fpga面试题-程序员宅基地

文章浏览阅读1.4w次,点赞16次,收藏229次。数字IC/FPGA面试笔试题,知识点详细讲解。_fpga面试题

Vue组件的八个钩子函数_vue的钩子函数-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏11次。1、生命周期函数 (c语言中有一类系统回调的函数然后执行业务 叫做钩子)2、 在某一种条件成立的时刻 系统会去调用的vue中设定的函数 这些函数都叫做:生命周期函数3、当前vm实例在创建到销毁的过程中 会去调用的函数基本分为四类。_vue的钩子函数

《现代操作系统(中文第四版)》课后习题答案 第一章 引论_操作系统的两大主要作用-程序员宅基地

文章浏览阅读4.6w次,点赞83次,收藏411次。多数是根据英文版原版答案翻译过来,少部分加了个人的理解1、操作系统的两大主要作用是什么?1.为应用程序提供一个资源集的清晰抽象(另一种说法:操作系统给用户提供了一个可扩展的机器。个人理解是通过对底层的抽象,对外提供各种接口支持扩展); 2.管理各种软硬件资源。2、在1.4节中描述了9中不同类型的操作系统,列举每种操作系统的应用(每种系统一种应用)1.大型操作系统(Mainf..._操作系统的两大主要作用

什么是飞机配平-程序员宅基地

文章浏览阅读7.1k次,点赞6次,收藏21次。飞机配平即寻求飞机平衡点,比如在一定速度和高度下定直平飞,飞机需要力平衡和力矩平衡,平衡是飞机稳定飞行的基础,在达到力与力矩平衡的基础上我们才能分析扰动下飞机能否正常飞行。若升力都无法克服重力或力矩不为零,那飞机是不可能定直平飞的。配平的要求就是保持该状态下各状态量为定值,比如定直平飞那么就要求速度不变、迎角不变、高度不变、航迹角不变.....,变化的量只是x,实质上x、y、z三个坐标可以用其他状态量算出来,在配平时我们不考虑。保持不变在数学上即导数为零,但是在数值计算情况下严格等于零是不现实的,为了达_飞机配平

python图形化监控系统界面_openlava图形化监控工具openlavaMonitor-程序员宅基地

文章浏览阅读392次。OpenLava是100%免费、开源、兼容IBM Spectrum LSFTM的工作负载调度器,支持各种高性能计算和分析应用,在各大IC公司被广泛引用。openlava开源免费,兼容LSF,是IC公司(尤其是中小型IC公司)的福音。但是由于种种原因,开源团队不再进行开发工作,且工具缺少配套的job/resource监控类工具,所以并不易用。以往的工作中,根据openlava使用中的实际需求,我开..._lsftm

Stm32f103c8t6(proteus仿真)学习——7-1.PWM驱动LED呼吸灯-程序员宅基地

文章浏览阅读1.7k次,点赞6次,收藏22次。7-1 PWM驱动LED呼吸灯

推荐文章

热门文章

相关标签