title author date CreateTime categories
使用 Resharper 特性
lindexi
2018-08-10 19:16:51 +0800
2018-4-25 11:28:2 +0800
resharper

本文告诉大家如何使用 Resharper 特性,在 VisualStudio 最好的插件就是 Resharper 不过他比较卡。

因为 Resharper 无法修改编译所以他只能提示语法,不能告诉编译错误,使用下面的特性可以让Resharper提示开发者语法,一般在开发库就需要用到这些特性。

如果想使用 Resharper 特性,首先需要安装一些类。最简单方法是随便写一个类,然后继承INotifyPropertyChanged按 alt+Enter选择 Implement InotifyPropertyChanged ,请看下面

2018-8-10-使用-Resharper-特性

现在 Resharper 会问你是不是要在项目添加特性,点击确定

2018-8-10-使用-Resharper-特性

可以看到项目有 Annotations.cs ,这个类就是特性

如果现在不希望使用这个方法,那么复制 Annotations.cs 到自己的项目,使用方法和上面一样。

CanBeNullAttribute

表示属性或参数可能为空,返回值可能为空。

2018-8-10-使用-Resharper-特性

使用了这个特性,就可以告诉 Resharper 在使用这个属性、参数之前需要先判断是不是空。

2018-8-10-使用-Resharper-特性

NotNullAttribute

和上面的不同,这个表示这个参数属性不为空。但是如果是公开的接口,还是需要判断。

2018-8-10-使用-Resharper-特性

标记了参数 NotNull 是告诉调用的时候不要传入为空,函数还是需要判断传入是否空。

这个可以标记在 函数返回值和属性,如果标记为函数返回,那么这个函数一定不要返回空。

ItemNotNullAttribute

表示一个列表的所有参数都不为空

2018-8-10-使用-Resharper-特性

如果判断一个项为空,就会提示这个为true,一般用在函数返回

ItemCanBeNullAttribute

和上面不同,表示列表可能存空的

2018-8-10-使用-Resharper-特性

如果不判断是否空的就使用,会告诉可能这个参数异常,这个很多人都在函数返回使用

StringFormatMethodAttribute

表示一个字符串传入的格式和 string.Format 一样

        public void TplxwfTrrhvkorj()
        {
            TdvddnwzShbkb("lindexi的博客: {0}"); // Warning: Non-existing argument in format string
        }

        [StringFormatMethod("message")]
        private void TdvddnwzShbkb(string message, params object[] args)
        {
        }

如果使用这个参数写了 {0} 就会告诉你需要参数,如果写的数值很多,那么就会告诉你需要写多少输入。

UsedImplicitlyAttribute

表示一个函数、属性是不被显式使用,如反射或其他方式使用,标记了这个特性就不会说接口没有被使用。

MeansImplicitUseAttribute

让一个函数、属性不会被认为没有 unused ,标记了就会因为不被使用警告。这个特性效果和 UsedImplicitlyAttribute 差不多。

NotifyPropertyChangedInvocatorAttribute

这个用在 WPF 的通知,表示一个函数是用来通知值更新的。这个特性用在 OnPropertyChanged ,自动帮你添加。

ValueProviderAttribute

用来表示这个值采用哪个静态类、常量传入

    public class Constants
    {
        public static int IntContst = 1;
        public const string StringConst = "1";
    }

    public class DlhcwtedSrhl
    {
        [ValueProvider("Constants")]
        private int _ddyHsuy;
        public void Foo([ValueProvider("Constants")] string str) { }

        public void Test()
        {
            Foo(Constants.StringConst);
            _ddyHsuy = Constants.IntContst;

        }
    }

LocalizationRequiredAttribute

表示字符串需要本地化,请看代码

    [LocalizationRequiredAttribute(true)]
    public class DwdThfck
    {
        public string TdstjxTrksfw { get; set; }
    }

2018-8-10-使用-Resharper-特性

除了标记在类 LocalizationRequiredAttribute 也可以标记属性

    public class DwdThfck
    {
        [LocalizationRequired(true)]
        public string TdstjxTrksfw { get; set; }

        public string HkmhuHgqdqhts { get; set; }
    }

2018-8-10-使用-Resharper-特性

CannotApplyEqualityOperatorAttribute

使用这个特性的类,如果进行两个类的判断就会警告,但是可以进行和 null 的判断。

    [CannotApplyEqualityOperator]
    public class DwdThfck

2018-8-10-使用-Resharper-特性

一般用在两个不能用来判断大小和相等的类。

PublicAPIAttribute

表示一个接口是公开的接口,用于标记在方法和接口。

        [PublicAPI]
        public void KvcirszdeSqdlpjwn()

之后就不能轻易修改这个接口命名和参数

即使一个接口现在只有内部使用,他也不会说 public can be make private

2018-8-10-使用-Resharper-特性

尝试去掉 PublicAPI 就会告诉 KqoSgqkpifef 方法没有被使用,HokwdSni 可以写为私有。

PureAttribute

表示一个方法不会修改状态,如果不使用他的返回值,那么这个方法和没有调用是一样的。

        public void MdrcaKxnu()
        {
            Multiply(123, 42); // Waring: Return value of pure method is not used
        }

        [Pure]
        private int Multiply(int x, int y) => x * y;

MustUseReturnValueAttribute

表示返回值必须使用,而且这个特性可以添加字符串,告诉开发者为什么需要返回值

        public void MdrcaKxnu()
        {
            Multiply(123, 42); 
        }



        [MustUseReturnValue("必须使用返回值")]
        private int Multiply(int x, int y) => x * y;

2018-8-10-使用-Resharper-特性

PathReferenceAttribute

字符串使用的是路径,使用这个特性参数就会在输入时提示解决方案的路径

        public void TtmtKfqnwprgg([PathReference]string dazqkjdkSkjfa)
        {

        }

2018-8-10-使用-Resharper-特性

CollectionAccessAttribute

表示函数是如何影响集合,一般用在继承几何的类的方法

需要传入 CollectionAccessType ,里面可以使用的值是

  • None 方法没有使用集合或没有影响

  • Read 方法只是读取集合

  • ModifyExistingContent 方法修改已有的元素

  • UpdatedContent 方法会修改集合

     public class KewughzSuftoq : List<int>
    {
        [CollectionAccess(CollectionAccessType.Read)]
        public void DkuoTbolcmj()
        {

        }
    }

如果这时调用这个方法不使用其他就会告诉集合没有修改

        public void TrhzeeKqmqw()
        {
            //Contents of the collection is never updated
            var dqjwdvxhTcrciidvp = new KewughzSuftoq();
            dqjwdvxhTcrciidvp.DkuoTbolcmj();
        }

TerminatesProgramAttribute

表示结束程序的方法,调用这个方法在后面的代码不会被执行

       public void KnmpDxsuhy()
        {
            KovtpgoHstwmbz();
            int n = 2;
            var str = "blog.csdn.net/lindexi_gd";

        }

        [TerminatesProgram]
        public void KovtpgoHstwmbz()
        {

        }

可以看到在 KovtpgoHstwmbz 后面的代码都提示不执行。

LinqTunnelAttribute

表示这个方法是在linq链中,支持自己扩展 linq 然后使用这个特性分析中间的结果

RegexPatternAttribute

表示字符串是正则,使用字符串出现正则提示。

这个特性只可以用在参数

BaseTypeRequiredAttribute

用于标记在特性,表示只有基类继承某个类的才可以使用这个特性

2018-8-10-使用-Resharper-特性

C#/.NET 中的契约 - walterlv

Code Annotation Attributes

相关文章:

  • 2022-12-23
  • 2021-11-06
  • 2021-04-29
  • 2021-08-30
  • 2021-12-24
  • 2021-08-30
  • 2021-10-04
猜你喜欢
  • 2022-01-20
  • 2021-09-03
  • 2021-12-24
  • 2021-11-01
  • 2021-10-20
  • 2021-06-30
相关资源
相似解决方案