C#中警告CA1050、CA1821、CA1822、CA1859、CA2249及处理
目录
一、CA1050警告及处理
1.如何解决冲突:
2.何时禁止显示警告:
二、CA1821警告及处理
三、CA1822警告及处理
四、CA1859警告及处理
1.警告解决之前
2.警告解决之后
3.解决办法
1.警告解决之前
2.警告解决之后
3.解决办法
五、CA2249警告及处理
一、CA1050警告及处理
严重性 | 代码 | 说明 | 项目 | 文件 | 行 | 禁止显示状态 | 详细说明 |
消息 | CA1050 | 在命名空间中声明类型 | EFGetStarted | D:\360安全浏览器下载\EntityFramework.Docs-main\samples\core\GetStarted\Model.cs | 28 | 活动 | 在命名空间中声明类型以防止名称冲突,并作为一种组织对象层次结构中相关类型的方式。 |
1.如何解决冲突:
若要修复与此规则的冲突,请将类型置于命名空间中。比如新增一个namespace Remove_CA1050{}命名空间,然后把发生所有程序代码剪切到这个空间中,警告自然消失。
2.何时禁止显示警告:
虽然根本不必禁止显示此规则中的警告,但当程序集绝不会与其他组件一起使用时,可以禁止显示。
二、CA1821警告及处理
严重性 | 代码 | 说明 | 项目 | 文件 | 行 | 禁止显示状态 |
消息 | CA1821 | 移除空终结器 | 03 | F:\C#_TM\chapter9\03\Program.cs | 16 | 活动 |
终结器=析构函数,一旦为空,CA1821。
应尽可能避免终结器,因为跟踪对象生存期会产生额外的性能系统开销。 垃圾回收器在收集对象之前运行终结器。
如果调试需要终结器,请将整个终结器置于 #if DEBUG / #endif 指令中。
public class Class3
{
#if DEBUG
// Violation will not occur because the finalizer will exist and
// contain code when the DEBUG directive is present. When the
// DEBUG directive is not present, the finalizer will not exist,
// and therefore not be empty.
~Class3()
{ Debug.Fail("Finalizer called!"); }
#endif
}
终结器(以前称为析构器)用于在垃圾回收器收集类实例时执行任何必要的最终清理操作。终结器隐式调用对象基类上的 Finalize。 因此,对终结器的调用会隐式转换为以下代码:
protected override void Finalize()
{try{// Cleanup statements...}finally{base.Finalize();}
}
这种设计意味着,对继承链(从派生程度最高到派生程度最低)中的所有实例以递归方式调用 Finalize 方法。不应使用空终结器。不必要的终结器会导致不必要的性能损失。对于终结器是否在应用程序终止过程中运行,这特定于每个 .NET 的实现。 .NET 5(包括 .NET Core)及更高版本不会在应用程序终止过程中调用终结器。
//析构函数
//CA1821:移除空终结器或需要#if DEBUG/#endif
//.NET Framework:输出显示当应用程序终止时,这三个类的终结器将按照派生程度最高到最低的顺序自动进行调用。
//.NET 5(包括 .NET Core)或更高版本:没有输出,因为在应用程序终止时,此 .NET 的实现不调用终结器。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Test9_3
{class Program{public Program(){Console.WriteLine("我是构造函数");}
#if DEBUG~Program() //析构函数{Console.WriteLine("析构函数自动调用"); //输出一个字符串}
#endifstatic void Main(string[] args){if (args is null) //解除IDE0060{throw new ArgumentNullException(nameof(args));}Program program = new(); //实例化Program对象 }}
}
/*运行结果:
我是构造函数 */
三、CA1822警告及处理
严重性 | 代码 | 说明 | 项目 | 文件 | 行 | 禁止显示状态 |
消息 | CA1822 | 成员“SubscribeToRing”不访问实例数据,可标记为 static | 09 | E:\C#_TM\chapter17\09\Program.cs | 42 | 活动 |
解决办法:按照提示,增加static修饰符。
四、CA1859警告及处理
严重性 | 代码 | 说明 | 项目 | 文件 | 行 | 禁止显示状态 |
消息 | CA1859 | 将变量“_Imyinterface”的类型从“_02.IMyInterface”更改为“_02.Program”,以提高性能 | 02 | E:\C#_TM\chapter17\02\Program.cs | 72 | 活动 |
1.警告解决之前
static void Main(string[] args)
{Program program = new(); //实例化Program类对象IMyInterface Imyinterface = program; //使用派生类对象实例化接口ImyInterfaceImyinterface.ID = "TM"; //为派生类中的ID属性赋值Imyinterface.Name = "C#从入门到精通"; //为派生类中的Name属性赋值Imyinterface.ShowInfo(); //调用派生类中方法显示定义的属性值Console.WriteLine("----------------------"); //用子类派生类直接实例化program.ID = "TM";program.Name = "C#从入门到精通";program.ShowInfo();Console.Read();
}
2.警告解决之后
static void Main(string[] args){Program program = new(); //实例化Program类对象//使用派生类对象实例化接口 ((IMyInterface)program).ID = "TM"; //为派生类中的ID属性赋值((IMyInterface)program).Name = "C#从入门到精通"; //为派生类中的Name属性赋值((IMyInterface)program).ShowInfo(); //调用派生类中方法显示定义的属性值Console.WriteLine("----------------------"); //用子类派生类直接实例化program.ID = "TM";program.Name = "C#从入门到精通";program.ShowInfo();Console.Read();}
3.解决办法
内联临时变量后,警告消失
严重性 | 代码 | 说明 | 项目 | 文件 | 行 | 禁止显示状态 |
消息 | CA1859 | 将变量“factory”的类型从“_01.IGenericInterface<System.ComponentModel.IListSource>”更改为“_01.Factory<System.Data.DataTable, System.ComponentModel.IListSource>”,以提高性能 | 01 | E:\C#_TM\chapter19\01\Program.cs | 36 | 活动 |
1.警告解决之前
//实例化接口
static void Main(/*string[] args*/)
{//实例化接口IGenericInterface<IListSource> factory = new Factory<System.Data.DataTable, IListSource>();//输出指定泛型的类型Console.WriteLine(factory.CreateInstance().GetType().ToString());Console.ReadLine();
}
2.警告解决之后
static void Main(/*string[] args*/)
{//内联临时变量后不需要实例化接口//输出指定泛型的类型Console.WriteLine(new Factory<System.Data.DataTable, IListSource>().CreateInstance().GetType().ToString());Console.ReadLine();
}
3.解决办法
内联临时变量,按着提示操作,不定义显式的变量。
五、CA2249警告及处理
请考虑使用 String.Contains 而不是 String.IndexOf
原因:
此规则查找对 IndexOf 的调用,其中结果用于检查是否存在 substring,并建议使用 Contains 来提高可读性。当使用 IndexOf 来检查结果是否等于 -1 或大于等于 0 时,可安全地将该调用替换为 Contains,而不会对性能产生影响。根据所使用的 IndexOf 重载,建议的解决方法可能是添加 comparisonType 参数:
重载 | 建议的解决方法 |
String.IndexOf(char) | String.Contains(char) |
String.IndexOf(string) | String.Contains(string,StringComparison.CurrentCulture) |
String.IndexOf(char, StringComparison.Ordinal) | String.Contains(char) |
tring.IndexOf(string, StringComparison.Ordinal) | String.Contains(string) |
String.IndexOf(char,NONStringComparison.Ordinal)* | String.Contains(char, NON StringComparison.Ordinal)* |
String.IndexOf(string,NON StringComparison.Ordinal)* | String.Contains(string, NON StringComparison.Ordinal)* |
* StringComparison.Ordinal 之外的任何 StringComparison 枚举值:
CurrentCulture
CurrentCultureIgnoreCase
InvariantCulture
InvariantCultureIgnoreCase
OrdinalIgnoreCase
CA2249:考虑使用“String.Contains”而不是“String.IndexOf”(代码分析) - .NET | Microsoft Learn https://learn.microsoft.com/zh-cn/dotnet/fundamentals/code-analysis/quality-rules/ca2249
相关文章:
C#中警告CA1050、CA1821、CA1822、CA1859、CA2249及处理
目录 一、CA1050警告及处理 1.如何解决冲突: 2.何时禁止显示警告: 二、CA1821警告及处理 三、CA1822警告及处理 四、CA1859警告及处理 1.警告解决之前 2.警告解决之后 3.解决办法 1.警告解决之前 2.警告解决之后 3.解决办法 五、CA2249警告…...

【Cmake】Cmake基础学习
CMake学习 一、基础学习 1. 利用Cmake进行单个源代码构建可执行文件 (1)基础命令 最基本的 CMake项目是由单个源代码文件构建的可执行文件。对于这样的简单项目,只需要一个包含三个命令的 CMakeLists.txt 文件。 注意: 虽然 CMake 支持大写、小写和混合大小写命令,但是…...

路径规划之Best-First Search算法
系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之Best-First Search算法 系列文章目录前言一、Best-First Search算法1.1 起源1.2 过程 三、简单使用 前言 Best-First Search算法和Dijkstra算法类似,都属于BFS的扩展或改进 一、…...
【Layui】动态时间线
官方时间线 代码<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">...
进程、线程以及进程与线程的区别
进程 1.什么是进程? 进程是进程实体的运行过程,是系统进行资源分配和资源调度的一个独立单位。 进程实体(又叫进程映像)由进程控制块(PCB),程序段,数据段三部分构成。 PCB 进程控…...
Java中的jvm——面试题+答案(Java虚拟机的基本概念,包括内存区域、类加载机制、垃圾回收等)——第15期
什么是Java虚拟机(JVM)? 答案: Java虚拟机是Java程序运行的环境,负责将Java源代码编译成字节码,并在运行时执行这些字节码。 Java虚拟机的主要组成部分有哪些? 答案: 主要组成部分…...

大数据平台/大数据技术与原理-实验报告--MapReduce编程
实验名称 MapReduce编程 实验性质 (必修、选修) 必修 实验类型(验证、设计、创新、综合) 综合 实验课时 2 实验日期 2023.10.30-2023.11.03 实验仪器设备以及实验软硬件要求 专业实验室(配有centos7.5系统…...

linux磁盘清理
目录 排查过程1、查看磁盘占用情况2. 按照占用大小进行倒排-当前目录及其子目录3.当前目录磁盘占用情况 清理命令 排查过程 1、查看磁盘占用情况 df -hdf -h 命令用于显示磁盘空间的使用情况,以人类可读的方式呈现,其中:df 是 “disk free”…...

万宾科技第四代可燃气体监测仪的作用
燃气作为一种重要的能源已在居民生活、工业生产和商业活动等领域得到了广泛的应用。但是与之而来的便是各种各样的燃气管网的安全问题,其中燃气管网泄漏成为了城市生命线建设中亟待解决的安全隐患。因此采取切实有效的措施来保障燃气管网的安全运行,应用…...

【Linux】探索进程的父与子
目录 1.获取进程PID1.1进程PPID 2.通过系统调用创建进程-fork初识2.1为什么fork函数要给子进程返回0,给父进程返回pid?fork函数如何做到返回两次的?fork干了什么事情?怎么理解一个变量为什么有两个不同的值?如果父子进…...

蚁剑低版本反制
蚁剑低版本反制 漏洞概述 中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。影响范围 AntSword <2.0.7 蚁剑实验版本:2.0.7 环境搭建: 172.16.1.233(蓝队服…...

Arthas 监听 Docker 部署的java项目CPU占比高的信息
1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 😕 ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…...

Node.js入门指南(二)
目录 http模块 创建http服务端 浏览器查看 HTTP 报文 获取 HTTP 请求报文 设置响应报文 网页资源的基本加载过程 静态资源服务 hello,大家好!上一篇文章我们对Node.js进行了初步的了解,并介绍了Node.js的Buffer、fs模块以及path模块。这一篇文章主…...

解锁Jira本地部署的数据中心版高级功能,打造高效、智能、精细化的项目管理
近日,在龙智携手Atlassian与JFrog共同举办的“大规模开发创新:如何提升企业级开发效率与质量”的线下研讨会中,龙智高级咨询顾问、Atlassian认证专家叶燕秀为大家带来了精彩演讲,解锁Jira Data Center版的诸多高级功能,…...
java线程三种方式
1.继承Thread类 线程1.2交替执行 public class MyThread extends Thread {Overridepublic void run() {for (int i 0; i < 100; i) {System.out.println(getName()"------""HelloWorld");}} } /*** desc 继承Thread类,线程1 2 交替执行* …...
关于mysql的lower_case_table_names引发的思考
lower_case_table_names设置大小写敏感的三个值0、1、2的区别? lower_case_table_names参数详解 1.参数说明: lower_case_table_names 0 表名 存储为给定的大小和比较是区分大小写的lower_case_table_names 1 表名 存储在磁盘是小写的 ,但…...

springboot+vue实现websocket通信实例,进入页面建立连接
springbootvue实现websocket通信实例 进入页面建立连接 前端代码: <template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true" v-show&qu…...
【个人记录】同步Linux服务器时间和时区
修改时区 timedatectl set-timezone Asia/Shanghai时间同步 使用ntp进行同步,时间服务器使用阿里云NTP服务器 安装NTP服务 yum install -y ntp写入NTP配置文件 cat > /etc/ntp.conf <<EOF driftfile /var/lib/ntp/drift restrict default nomodify no…...

面试常问-如何判断链表有环、?
如何判断链表有环 题目:解决方案一:解决方案二:解决方案三: 题目: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,…...

基于springboot实现农机电招平台系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现农机电招平台系统演示 摘要 随着农机电招行业的不断发展,农机电招在现实生活中的使用和普及,农机电招行业成为近年内出现的一个新行业,并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...