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 ,请看下面

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

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

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

CanBeNullAttribute

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

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

NotNullAttribute

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

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

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

ItemNotNullAttribute

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

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

ItemCanBeNullAttribute

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

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

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; }
}

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

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

CannotApplyEqualityOperatorAttribute

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

    [CannotApplyEqualityOperator]
public class DwdThfck

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

PublicAPIAttribute

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

        [PublicAPI]
public void KvcirszdeSqdlpjwn()

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

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

尝试去掉 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;

PathReferenceAttribute

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

        public void TtmtKfqnwprgg([PathReference]string dazqkjdkSkjfa)
{ }

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

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

C#/.NET 中的契约 - walterlv

Code Annotation Attributes

2018-8-10-使用-Resharper-特性的更多相关文章

  1. fir.im Weekly - 从 iOS 10 SDK 新特性说起

    从 iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 的分屏多任务特性,今年的 WWDC iOS 10 SDK ...

  2. 【ArcGIS 10.2新特性】ArcGIS Online新特性(上)

    概述 7月,ArcGIS Online发布了很多更新.主要内容有:新的网站设计,增强了Web制图,数据分析,应用程序创建,以及机构管理等功能. 更新的大致内容总结如下: 地图查看器:新的分析工具.获取 ...

  3. 【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)

    4 三维 4.1 共享三维场景         用户能够将ArcScene文档导出为3D web场景,能够被加载到ArcGIS Online.Portal或本地Web服务器上并进行分享.这样,用户可以 ...

  4. Java 10 的 10 个新特性,将彻底改变你写代码的方式!

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  5. 申请Office 365一年免费的开发者账号攻略(2018年10月份版本)

    要进行Office 365开发,当然需要有完整的Office 365环境才可以.为了便于广大开发人员快速地启动这项工作,微软官方给所有开发人员提供了免费的一年开发者账号   那么如何申请Office ...

  6. IntelliJ IDEA 最新激活码(截止到2018年10月14日)

    IntelliJ IDEA 注册码: EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYX ...

  7. 新手C#SQL Server使用记录2018.08.10

    主键(PrimaryKey):主键就是每个数据行(记录)的唯一标识,不会有重复值的列(字段)才能当做主键.一个表可以没有主键,但是这样会很难处理表,因此一般情况表都要设置主键. 主键有两张选用策略,分 ...

  8. Java 9和Java 10的新特性

    http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...

  9. [转] Scala 2.10.0 新特性之字符串插值

    [From]  https://unmi.cc/scala-2-10-0-feature-string-interpolation/ Scala 2.10.0 新特性之字符串插值 2013-01-20 ...

  10. 01 mybatis框架整体概况(2018.7.10)-

    01 mybatis框架整体概况(2018.7.10)- F:\廖雪峰 JavaEE 企业级分布式高级架构师课程\廖雪峰JavaEE一期\第一课(2018.7.10) maven用的是3.39的版本 ...

随机推荐

  1. [洛谷2257]YY的GCD 题解

    整理题目转化为数学语言 题目要我们求: \[\sum_{i=1}^n\sum_{i=1}^m[gcd(i,j)=p]\] 其中 \[p\in\text{质数集合}\] 这样表示显然不是很好,所以我们需 ...

  2. SpringBoot整合MongoDb(二)

    构建项目及配置 pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</ ...

  3. android 启动默认的邮件客户端,多附件的问题

    目前开发的app中需要发送邮件,所以需要调用android默认的邮件客户端,并需要添加多个邮件附件,我该通过哪个组件调用默认的客户端?用什么组件来支持多个附件的电子邮件? 是通过下面的哪一个?(Int ...

  4. Android and HTML5 开发手机应用(转载)

    作为一个WEB开发者,HTML5让我兴奋,因为它可以将桌面应用程序功能带入浏览器中.但在国内,看着到处横行的IE8版本以下的浏览器,觉得到能大规模使用HTML5技术的那天,还遥遥无期.但面对iOS及A ...

  5. Qt 中文问题

    Qt windows/linux跨平台中文编码解决 系统环境:windows8.1 / ubuntu 14.04Qt5.4.2 QtCreator 3.4.1 编码设置:QtCreator:工具/选项 ...

  6. 2018 CCPC 秦皇岛 I (状压DP)

    题意: 首先t组数据  (t<=5),一个n代表有n件东西,每个东西可以代表两个物品,商品或者袋子,每个都有个值,如果这个要代表袋子的话,当前就代表是容量,而且必须把其他几件不是袋子的物品放一些 ...

  7. RabbitMQ消费端自定义监听(九)

    场景: 我们一般在代码中编写while循环,进行consumer.nextDelivery方法进行获取下一条消息,然后进行消费处理. 实际环境: 我们使用自定义的Consumer更加的方便,解耦性更强 ...

  8. CTO爆料:2019程序员最需要了解的行业前沿技术是什么?

    安森,个推CTO 毕业于浙江大学,现全面负责个推技术选型.研发创新.运维管理等工作,已带领团队开发出针对移动互联网.金融风控等行业的多项前沿数据智能解决方案. 曾任MSN中国首席架构师,拥有十余年资深 ...

  9. nf_conntrack: table full, dropping packet解决方法

    https://blog.csdn.net/yanggd1987/article/details/45886913

  10. /etc/init.d# ./redis-server start

    root@ubuntu:/etc/init.d# ll total drwxr-xr-x root root May : ./ drwxr-xr-x root root May : ../ -rwxr ...