C#中的警告CS0120、CS0176、CS0183、CS0618、CS8600、CS8602、CS8604、CS8625及处理
目录
一、CS0120
二、CS0176
1.解决前
2.解决后
3.解决办法
三、CS0183
四、CS0618
五、CS8600
六、CS8602
七、CS8622
1. 解决前:
2. 解决后:
3.解决方法:
八、CS8604和CS8625
一、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。
相关文章:
C#中的警告CS0120、CS0176、CS0183、CS0618、CS8600、CS8602、CS8604、CS8625及处理
目录 一、CS0120 二、CS0176 1.解决前 2.解决后 3.解决办法 三、CS0183 四、CS0618 五、CS8600 六、CS8602 七、CS8622 1. 解决前: 2. 解决后: 3.解决方法: 八、CS8604和CS8625 一、CS0120 严重性 代码 说明 项目 文件 行…...
CSS:浏览器设置placeholder样式 / 微信小程序设置placeholder样式
一、web 设置placeholder 设置浏览器的placeholder样式 ::-webkit-input-placeholder { /* WebKit browsers */color: #999; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */color: #999; } ::-moz-placeholder { /* Mozilla Firefox 19 */color: #999; } :-ms-input-p…...
升级python后sudo apt-get update报错
sudo apt-get update 报错: sh: /usr/lib/cnf-update-db: /usr/bin/python3.7.5: bad interpreter: No such file or directory Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success if /usr/bin/test -w /var/lib/c…...
应用可观测性OpenTelemetry简介
应用可观测性OpenTelemetry简介 OpenTelmetry遥测方案可观测性三支柱日志 Logs指标跟踪 什么是OpenTelemetryOpenTelemetry架构和组件OpenTelemetry与OpenCensus、OpenTracing是什么关系 OpenTelmetry遥测方案 可观测性三支柱 日志 Logs 日志是特定事件在特定时间点发生的文本…...
install pnpm : 无法加载文件的解决办法
问题描述 我在使用pnpm的时候报错 PS D:\emss\pure-admin-backend> pnpm install pnpm : 无法加载文件 C:\Users\RD-16\AppData\Roaming\npm\pnpm.ps1。未对文件 C:\Users\RD-16\AppData\Roaming\npm\pnpm.ps1 进行数字签名。无法在当前系统上运 行该脚本。有关运行脚本和设…...
【Python百宝箱】Python数据探险:Excel与数据科学的完美结合
前言 在当今信息爆炸的时代,数据处理和分析已经成为各行各业不可或缺的一部分。在众多数据处理工具中,Python以其简洁而强大的语法成为数据科学家和分析师的首选之一。本文将深入探讨与电子表格处理相关的Python库,介绍它们的功能、应用场景…...
外贸分享|如何从外贸小白成长为大咖?这10件事值得你坚持做
外贸成功不是一朝一夕的事,而是需要有充分的准备和持续的努力。作为一位有着丰富经验的外贸人员,我总结了成功的秘诀,分享了一个优秀的外贸人应该做好的10项工作。 1 找不到客户怎么办? 有很多各种各样的原因值得思考:…...
深度学习之六(自编码器--Autoencoder)
概念 自编码器(Autoencoder)是一种神经网络架构,用于无监督学习和数据的降维表示。它由两部分组成:编码器(Encoder)和解码器(Decoder)。 结构: 编码器(Encoder): 接收输入数据并将其压缩为潜在表示(latent representation),通常比输入数据的维度要低。编码器的…...
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/3)
博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…...
Vim 一下日志文件,Java 进程没了?
一次端口告警,发现 java 进程被异常杀掉,而根因竟然是因为在问题机器上 vim 查看了 nginx 日志。下面我将从时间维度详细回顾这次排查,希望读者在遇到相似问题时有些许启发。 时间线 15:19 收到端口异常 odin 告警。 状态:P1故障 名称:应用端…...
C# Dictionary的使用
在 C# 中,Dictionary 是一种常用的数据结构,用于存储键值对。以下是一些常见的 Dictionary 操作: 创建和初始化一个 Dictionary 可以使用以下代码创建并初始化一个 Dictionary: Dictionary<string, int> dict new Dicti…...
解决DaemonSet没法调度到master节点的问题
最近在kubernetes部署一个springcloud微服务项目,到了最后一步部署边缘路由:使用nginx-ingress和traefik都可以,必须使用DaemonSet部署,但是发现三个节点,却总共只有两个pod。 换句话说, DaemonSet没法调度…...
2023.11.20 关于 Spring MVC 详解
目录 MVC 工作流程 Spring MVC 掌握三个功能 创建 Spring MVC 项目 推荐安装插件 EditStarters 基础注解 RequestMapping 指定 GET 和 POST 方法类型 ResponseBody 获取参数 传递 单个 或 多个参数 参数重命名 RequestParam 接收 JSON 对象 RequestBody 获取 …...
救命~终于找到一款好看又舒适的家居服了
暖乎乎的软糯家居服 简直不要太好看太舒服了 双层舒棉绒舒适又暖和 防风收口设计,时尚与实用性兼具 经典版型不挑人穿 居家外出都可哦!!...
C#每天复习一个重要小知识day5:枚举与switch是天生一对
因为枚举一般用来表示条件和类型等等,所以它一般用条件分支来表现。所以枚举与switch是天生一对,因为很方便。(用if语句也可,但是没switch方便) 简单的举例: namespace 精细练习 {enum E_Player {Main,Ot…...
idea修改行号颜色
前言 i当idea用了深色主题后,发现行号根本看不清,或者很模糊 例如下面这样 修改行号颜色 在IntelliJ IDEA中,你可以根据自己的喜好和需求定制行号的颜色。下面是修改行号颜色的步骤: 打开 IntelliJ IDEA。 转到 “File”&…...
U-boot(四):start_armboot
本文主要探讨210的uboot启动的第二阶段,主要函数为start_armboot。 uboot 一阶段初始化SoC内部部件(看门狗、时钟等),初始化DDR,重定位 二阶段初始化其余硬件(iNand、网卡芯片)以及命令、环境变量等 启动打印硬件信息,进入bootdelay,读秒完后执行bootc…...
.Net面试题4
1.请解释一下泛型(Generics)在C#中的作用。 泛型是一种将数据类型参数化的机制,使得代码可以在编译时具有更强的类型安全性和灵活性。C#中的泛型可以用于类、接口、方法等的定义和实例化。泛型允许在编写代码时使用具有不同实参的类型&#x…...
python 列表插入数据的 四种方法 append insert extend 切片赋值
append insert 插入单个数据 append 加到末尾,insert 加到指定位置 extend、切片方式插入多个数据 extend 加到末尾,切片加到指定位置 my_list [1, 2, 3] my_list.append(4) print(my_list) # 输出: [1, 2, 3, 4]my_list [1, 2, 3] my_list.insert(…...
C++中std::string的=,+,+=使用过程中的问题
1. 调用构造函数时的运算符不支持int,char类型的操作数 string str1 a; //error 这是一个构造函数。C中string是一个类,内部封装了char *来管理这个字符串。 string的构造函数: string() // 创建一个空的字符串string(const char * s)…...
别再混淆了!一文搞懂OpenHarmony NAPI中的同步、回调与Promise接口(附代码对比)
OpenHarmony NAPI接口设计实战:同步、回调与Promise的黄金选择法则 当你在OpenHarmony生态中封装一个底层功能时,总会面临这个灵魂拷问:该用同步接口、回调函数还是Promise?这个看似简单的选择背后,藏着性能、可维护性…...
从timerfd到epoll:手把手教你打造Linux C++高性能定时器管理器
从timerfd到epoll:构建Linux C高性能定时器管理器的工程实践 在游戏服务器、物联网网关或高频交易系统中,定时器管理往往是性能瓶颈的关键所在。想象一下,当你的服务器需要同时处理数万个玩家技能冷却、状态刷新或订单超时检测时,…...
【Python基础】零基础入门到实战,这一篇就够了!(附详细代码)
前言 大家好,我是jifeng,今天给大家带来一篇全网最贴心的Python保姆级入门教程。 在这个AI与大数据爆发的时代,“人生苦短,我用Python” 早已不仅仅是一句口号。无论是Web开发、数据分析、人工智能还是日常办公自动化࿰…...
告别Techpoint和Nextchip!实测国产XS9922A/B芯片在车载DVR上的完整替换流程
国产XS9922A/B芯片在车载DVR中的实战替换指南 最近两年,车载电子行业面临着一个共同的挑战:进口芯片供应不稳定导致项目延期风险陡增。作为一名长期从事车载DVR设计的硬件工程师,我亲历了从Techpoint TP9930到国产XS9922B的完整替换过程。这…...
3个核心功能解决B站视频下载难题:BilibiliDown完全指南
3个核心功能解决B站视频下载难题:BilibiliDown完全指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...
从攻击者视角看防御:手把手复现一次MSF对Windows的渗透,并教你如何用Sysmon和防火墙规则发现它
从攻击者视角构建防御体系:基于Sysmon的Windows渗透检测实战 当安全团队真正理解攻击者的思维和工具链时,防御才能做到有的放矢。本文将采用"以攻代防"的视角,通过完整复现一次典型的渗透过程,深入剖析如何利用Sysmon和…...
AI Agent开发6种实用设计模式:小白程序员必备收藏,快速提升实战能力!
本文介绍了AI Agent开发的六种核心设计模式,包括ReAct、Tool Use、Reflection、Planning、Multi-Agent和Human-in-the-Loop,详细讲解了每种模式的核心思想、优缺点、适用场景及Java代码实现。文章强调了选择合适模式的重要性,并建议从简单的R…...
别再被XML命名空间坑了!手把手教你用JAXB解析带命名空间的XML(附完整代码)
深度解析JAXB处理XML命名空间的五种实战方案 金融报文、Web服务响应、企业级数据交换——在这些需要处理标准化XML格式的场景中,命名空间就像一把双刃剑。它本是为了解决元素命名冲突而设计,却常常成为Java开发者使用JAXB解析时的"拦路虎"。当…...
Mac/Linux用户的应急工具箱:当老板发来一个加密zip忘了密码,用fcrackzip的3种找回方法
Mac/Linux用户的应急工具箱:用fcrackzip破解加密zip的3种实战策略 上周五下午4点52分,市场部的Lisa突然在Slack上弹出一条消息:"紧急!季度财报分析.zip的密码老板记不清了,能帮帮忙吗?" 这种场景…...
别让Claude Skill变‘话痨’:从官方最佳实践看如何写出‘省token’的高效技能
从Claude Skill设计哲学看高效AI交互的成本控制艺术 在AI技术快速迭代的今天,大型语言模型(LLM)的应用已经从简单的对话扩展到复杂的任务自动化。作为这一领域的先驱之一,Claude Skill系统为开发者提供了构建专业化AI能力的平台。然而,随着应…...
