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

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

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

相关文章

基恩士软件的基本操作(五,日志记录与使用)

目录 基恩士是如何保存日志的&#xff1f; 如何使用日志功能 查看DM10的值1秒加1的记录日志 设定id与储存位置 软元件设定&#xff08; 日志ID有10个&#xff08;0~10&#xff09;&#xff0c;每一个ID最多添加512个软元件&#xff09; 设定触发 执行日志的梯形图程序 触…

【Amazon】在Amazon EKS集群中安装部署最小化KubeSphere容器平台

文章目录 一、准备工作二、部署 KubeSphere三、访问 KubeSphere 控制台四、安装Amazon EBS CSI 驱动程序4.1 集群IAM角色建立并赋予权限4.2 安装 Helm Kubernetes 包管理器4.3 安装Amazon EBS CSI 驱动程序 五、常见问题六、参考链接 一、准备工作 Kubernetes 版本必须为&…

i社为什么不出游戏了?

I社&#xff0c;即国际知名的游戏公司&#xff0c;近来为何鲜有新游问世&#xff1f;曾经风靡一时的游戏开发者&#xff0c;如今为何陷入了沉寂&#xff1f;这其中的种种原因&#xff0c;值得我们深入剖析。 首先&#xff0c;I社近期的沉寂可能与其内部管理层的调整和战略规划…

Scrum敏捷开发培训团队和组织来说的重要性

Scrum敏捷开发培训对于团队和组织来说是至关重要的&#xff0c;有以下几点&#xff0c;大家可以参考下&#xff1a; 理解敏捷价值观和原则&#xff1a; 培训有助于团队理解敏捷方法背后的核心理念和价值观&#xff0c;包括个体和互动、工作软件、客户合作和响应变化。这有助于建…

RESTful API 架构快速入门 Flask实现

RESTful 简介 1.1 为什么要使用 RESTful 架构&#xff1f; Representational State Transfer&#xff08;REST&#xff09;是一种面向资源的架构风格&#xff0c;广泛应用于网络服务的设计和开发。使用RESTful架构有以下几个优点&#xff1a; 简单性和可扩展性&#xff1a; RE…

[LaTex]arXiv投稿攻略——jpg/png转pdf

一、将图片复制进ppt&#xff0c;右键单击图片选择设置图片格式&#xff0c;获取图片高度和宽度 二、选择“设计-幻灯片大小-自定义幻灯片大小” 三、设置幻灯片大小为图片大小 四、 选择“最大化” 五、 检查幻灯片大小是否与图像大小一致 六、导出为PDF

浅谈Python中的鸭子类型和猴子补丁

文章目录 前言一、鸭子类型二、猴子补丁关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Python 开发者可能…

C++变量、函数、类的声明和定义

参考文章&#xff1a;C中的类——类的定义和声明_c类的声明-CSDN博客 声明&#xff1a;向程序表明类型和名字&#xff0c;可以声明多次&#xff1b; 定义&#xff1a;分配存储空间&#xff0c;只能定义一次&#xff08;有了定义&#xff0c;可以省略声明&#xff09;&#xf…

进程并发-信号量经典例题-面包师问题

1 题目描述 面包师有很多面包和蛋糕&#xff0c;由N个销售人员销售。每个顾客进店后先取一个号&#xff0c;并且等着叫号。当一个销售人员空闲下来&#xff0c;就叫下一个号。试用信号量的P、V操作设计该问题的同步算法&#xff0c;给出所用共享变量&#xff08;如果需要&…

springboot打印启动信息

打印启动信息 转载自:www.javaman.cn 1 spring Bean实例化流程 基本流程&#xff1a; 1、Spring容器在进行初始化时&#xff0c;会将xml或者annotation配置的bean的信息封装成一个BeanDefinition对象&#xff08;每一个bean标签或者bean注解都封装成一个BeanDefinition对象&a…

【Vulnhub靶机】Jarbas--Jenkins

文章目录 信息收集主机发现端口扫描目录爆破 漏洞探测whatwebhash-identifierwhatweb 文档说明&#xff1a;https://www.vulnhub.com/entry/jarbas-1,232/ 靶机下载&#xff1a;Download (Mirror): 信息收集 主机发现 扫描C段 sudo nmap -sn 10.9.75.0/24端口扫描 sudo nma…

装饰者设计模式

package com.jmj.pattern.decorator;/*** 快餐类(抽象构建角色)*/ public abstract class FastFood {private float price;private String desc;public float getPrice() {return price;}public void setPrice(float price) {this.price price;}public String getDesc() {retu…

竞赛选题 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于pyt…

精进:简单聊聊华为战略与DSTE

首发&#xff1a;麦子禾 作者&#xff1a;石头 在以前专题文中&#xff0c;石头聊华为市场管理MM、基于价值驱动的业务设计VDBD、轻量级战略流程五看三定、业务领先模型BLM、业务执行力模型BEM比较多&#xff0c;印象中石头没有具体谈过DSTE&#xff08;从战略规划到执行&…

LV.12 D20 RTC实验 学习笔记

一、RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电 二、Exynos4412下的 RTC控制器 它支持…

Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/4)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

基于STM32的OLED多级菜单GUI实现(简化版智能手表)

前言&#xff1a;本文的OLED多级菜单UI为一个综合性的STM32小项目&#xff0c;使用多传感器与OLED显示屏实现智能终端的效果。项目中的多级菜单UI使用了较为常见的结构体索引法去实现功能与功能之间的来回切换&#xff0c;搭配DHT11&#xff0c;RTC&#xff0c;LED&#xff0c;…

【机器学习 | 开山篇】打造坚实基础、Kaggle 登榜之路

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Linux中部署MongoDB

在 是一个必要的过程&#xff0c;因为MongoDB是一种流行的NoSQL数据库&#xff0c;它可以在大多数操作系统上使用。在本文中&#xff0c;我们将介绍如何在CentOS 8上部署MongoDB。 MongoDB的下载 您可以从MongoDB官网上下载最新的MongoDB版本。使用以下命令下载MongoDB&#…

SSF-CNN:空间光谱融合的卷积光谱图像超分网络

SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION 文章目录 SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION简介解决问题网络框架代码实现训练部分运行结果 简介 ​ 本文提出了一种利用空…