规则引用笔记
CA2000:丢失范围之前释放对象
原因
创建了 IDisposable 类型的本地对象,但该对象不会被释放,除非对对象的所有引用都超出范围。
默认情况下,此规则会分析整个代码库,但这是可配置的。
如何解决冲突
可使用 using
语句来包装实现 IDisposable 的对象。 以这种方式包装的对象将自动在 using
块的末尾释放。
但是,以下情况不应或不能使用 using
语句进行处理:
-
若要返回一次性对象,必须在块外部的
try/finally
using
块中构造该对象。 -
请勿在
using
语句的构造函数中初始化可释放对象的成员。
案例
var bytearray = new ByteArrayContent(data); //释放对象消除警告 bytearray.Dispose();
CA2234:传递 System.Uri 对象,而不传递字符串
原因
已调用具有字符串参数的方法,该字符串参数的名称包含 “uri”、“Uri”、“urn”、“url”或“Url”,而且该方法的声明类型包含一个具有 System.Uri 参数的相应方法重载。
默认情况下,此规则仅查看外部可见的方法和类型,但这是可配置的。
如何解决冲突
若要解决此规则的冲突,请调用采用 Uri 参数的重载。
案例
class History { internal void AddToHistory(string uriString) { } internal void AddToHistory(Uri uriType) { } } public class Browser { History uriHistory = new History(); public void ErrorProne()//规则冲突 { uriHistory.AddToHistory("http://www.adventure-works.com"); } public void SaferWay()//不冲突方法 { try { Uri newUri = new Uri("http://www.adventure-works.com"); uriHistory.AddToHistory(newUri); } catch (UriFormatException) { } } }
CS0234 :编译器错误
命名空间“namespace”中不存在类型或命名空间名“name”(是否缺少程序集引用?)
案例
Vol.System与System命名空间冲突,解决方案using Sys = System 使用别名Sys.IO解决
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现