规则引用笔记

CA2000:丢失范围之前释放对象

原因

创建了 IDisposable 类型的本地对象,但该对象不会被释放,除非对对象的所有引用都超出范围。

默认情况下,此规则会分析整个代码库,但这是可配置的。

如何解决冲突

可使用 using 语句来包装实现 IDisposable 的对象。 以这种方式包装的对象将自动在 using 块的末尾释放。

但是,以下情况不应或不能使用 using 语句进行处理:

  • 若要返回一次性对象,必须在块外部的try/finallyusing块中构造该对象。

  • 请勿在 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解决

 

posted @ 2022-05-20 16:35  微风吹过~  阅读(28)  评论(0编辑  收藏  举报