首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ReSharper如何知道这种返回类型永远不会为空?

在ReSharper中,可以使用注释或特定的代码结构来指示某个返回类型永远不会为空。以下是一些可能的方法:

  1. 使用注释:可以使用特定的注释来标记返回类型永远不会为空。例如,可以使用[NotNull][return: NotNull]注释方法或属性。
代码语言:csharp
复制
[return: NotNull]
public string GetNonNullString()
{
    // ...
}
  1. 使用!操作符:在返回类型后面加上!操作符,表示这个类型永远不会为空。
代码语言:csharp
复制
public string! GetNonNullString()
{
    // ...
}
  1. 使用System.Diagnostics.CodeAnalysis.NotNullAttribute:这是一个.NET标准库中的属性,可以用来标记方法或属性的返回类型永远不会为空。
代码语言:csharp
复制
using System.Diagnostics.CodeAnalysis;

[return: NotNull]
public string GetNonNullString()
{
    // ...
}
  1. 使用ContractAnnotation属性:这是一个JetBrains提供的特性,可以用来指定方法的预条件和后置条件。
代码语言:csharp
复制
using JetBrains.Annotations;

[ContractAnnotation("=> notnull")]
public string GetNonNullString()
{
    // ...
}

通过使用这些方法,ReSharper可以更好地理解返回类型的特性,从而提供更准确的代码分析和自动完成建议。同时,这也有助于提高代码的可读性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#.NET 中的契约

C#8.0 的可引用类型是 Roslyn 对 null 的验证,本以为会带来编译级别的警告,没想到也只是契约。...---- 契约式编程 当你调用某个类库里面的方法时,你如何能够知道传入的参数是否符合规范?如何能够知道方法调用结束之后是否要对结果进行判断?...T DoSomething(T parent) where T : class; ▲ 对于上面的方法,你知道 null 传入参数是合理的吗?返回的参数需要判吗?...} 有些静态代码检查工具也许可以根据这里的参数判断代码块来认定为此处的参数不能为 null,但这种判断代码无处不在,静态检查工具如何能够有效地捕获每一处的检查呢?难道我们真的要去翻阅文档吗?...不过,ReSharper 会为我们生成运行时检查的代码。

93210

Resharper上手指南

有一些使用者更期望跳转到元数据文件,但是我更喜欢对象浏览器,这样类型的公有属性、方法、事件都被列出来了,可以一目了然。就我的经验,列表永远比下拉框,选框更加易于查找。   ...按下Alt+Enter,则会为你生成这些方法。...(如果你常常下载codeproject上的代码的话,会知道这种事情常有。) 说了这么多,其实就是想把对象浏览器和region的长处结合起来,既可以清晰的分类,又能一目了然的找到需要的方法。...3、对于方法,提供了:  •与字段类似的功能,此外;  •Change Signature,更改函数签名,包括更改名称,返回类型,参数的各种信息,添加和删除参数,相当实用。...Resharper会根据这个变量的类型,为你提供几个备选名字,名字列表是列在光标位置上的(对方法重命名会弹出对话框),你只需要用方向键选择并敲回车即可,这种名字多是将类型的名字首字母改为小写得来的,甚至刨根到基类的类型

1.7K60
  • 使用 Resharper 特性

    本文告诉大家如何使用 Resharper 特性,在 VisualStudio 最好的插件就是 Resharper 不过他比较卡。...CanBeNullAttribute 表示属性或参数可能为返回值可能为。 使用了这个特性,就可以告诉 Resharper 在使用这个属性、参数之前需要先判断是不是。...标记了参数 NotNull 是告诉调用的时候不要传入为,函数还是需要判断传入是否。 这个可以标记在 函数返回值和属性,如果标记为函数返回,那么这个函数一定不要返回空。...ItemNotNullAttribute 表示一个列表的所有参数都不为 如果判断一个项为,就会提示这个为true,一般用在函数返回 ItemCanBeNullAttribute 和上面不同,表示列表可能存的...如果判断是否的就使用,会告诉可能这个参数异常,这个很多人都在函数返回使用 StringFormatMethodAttribute 表示一个字符串传入的格式和 string.Format 一样

    75920

    ReSharper 配置及用法

    Resharper这时帮上你的大忙了。用Ctrl+F11,就弹出一个像右边这样的窗口来。 这里面,按照你的region来显示,这样读你的代码的人也受益了。每个方法的参数,返回值都如UML一样列出来。...会根据对象的类型名称,提供你几个可选的最合适的名称) 重新排列参数 —— 移到Change Signature(改变方法签名)中 我知道很多人都声称自己E文不好,但是,这确实都是很简单的单词,难不倒任何人的...3、对于方法,提供了: 与字段类似的功能,此外; Change Signature,更改函数签名,包括更改名称,返回类型,参数的各种信息,添加和删除参数,相当实用。...Resharper会根据这个变量的类型,为你提供几个备选名字,名字列表是列在光标位置上的(对方法重命名会弹出对话框),你只需要用方向键选择并敲回车即可,这种名字多是将类型的名字首字母改为小写得来的,甚至刨根到基类的类型名...生成的代码中最常用的是构造函数和属性,当你没有私有字段的时候,只会生成一个的默认构造函数,而且没有生成属性的功能。

    1.8K10

    #1在构造函数内调用虚方法 | TW洞见

    我们在构造函数中调用虚方法,碍着ReSharper什么事儿了? 其实这个警告就是提醒我们不要在非封闭类型的构造函数内调用虚方法或虚属性。但为什么这样做不合适呢?在解惑之前,我们先来了解两个概念。...比如找出所调用对象的实际类型,以访问正确的方法表(调用b.V()的时候就会找到变量b的实际类型Derived,从而输出Derived.V)。...这是因为V可以在Base的任意子类中被改写(override),而这种改写,很有可能使得它依赖于自己的构造函数,如上例所示。...而由于之前提到的类型初始化顺序,在执行Base b = new Derived();这样的代码时,Base的构造函数要早于Derived的构造函数执行,因此在执行到foo.Bar()时foo还是个引用...这是因为NHibernate为了实现延迟加载,会为每个实体类生成proxy,这些proxy需要重写实体类中属性的getter/setter。

    1.2K110

    (译)Dart2.12版本发布,可靠的安全,dart:ffi正式投入生产

    1.Dart平台独有的功能 在我们详细研究可靠的安全和FFI之前,让我们讨论一下Dart平台如何将它们适合我们的目标。编程语言倾向于共享许多的功能。...通过选择安全性,您可以在开发过程中捕获错误,从而防止生产崩溃。 合理的安全性是围绕一些核心原则设计的。让我们重新审视这些原则如何影响您作为开发人员。...这里有一些例子: 一个内部团队发现,他们经常检查永远不能为null的表达式的null值。使用protobuf的代码中最经常出现此问题,其中可选字段在未设置时返回默认值,并且永远会为null。...在实现null安全之前,这些对象将返回null并掩盖错误;出于安全考虑,可靠的分析器确定这些属性永远会为,并引发了分析错误。...由于Dart确保不可为的变量永远会为null,因此Dart可以进行优化。

    2.7K20

    如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?

    然而使用 Visual Studio 2019 社区版搭配 ReSharper 则可以免费为开源社区做贡献。...修改快捷键方法详见: 如何快速自定义 Visual Studio 中部分功能的快捷键 另外,在 IntelliCode 部分,可以选择打开更多的 IntelliSense 完成项: 在输入时即自动导入需要的命名空间...ReSharper 的智能感知提示包含所依赖的各种程序集中的类型,然而 Visual Studio 的智能感知则没有包含那些,只有顶部写了 using 的几个命名空间中的类型。...默认是没有开启的,当开启后,你将直接能在智能感知提示中看到原本 ReSharper 中才能有的编写任何类型的体验。...提取局部变量 在 ReSharper 中,选中一段代码,如果这段代码可以返回一个值,那么可以使用重构快捷键(默认 Alt+Enter)生成一个局部变量。

    42530

    如何快速编写和调试 Emit 生成 IL 的代码

    之前我写过一篇创建委托以大幅度提高反射调用的性能的方法,不过此方法适用于预先知道方法参数和返回类型的情况。如果我们在编译期不知道类型,那么它就行不通了。(原因?...注意到那篇文章中返回的委托有类型强转吗?也就是说需要编译期确定类型,即便是泛型。)...使用表达式树(不是本文重点) 使用 Emit(本文) 如果事先不能知道类型,那么只能每次通过反射去动态的调用,于是才会耗费大量的性能。...我们可以用 int 为 double 类型的属性赋值,但在本例代码中却不可行,如何解决这种隐式转换的问题? 如果你尝试编写了 Emit 的代码,那么上面的问题应该难不倒你。...通过 ReSharper 插件,我们可以实时查看生成的 IL 代码。 我们可以将 Emit 生成的代码输出到程序集文件。 通过 dotPeek,我们可以查看程序集中类型和方法的 IL 代码。

    1.6K10

    《深入浅出Dart》安全

    在引入安全之前,Dart 任何对象都可以为。然而,这种设计虽然看起来灵活,但实际上会引起很多问题,尤其是当开发者假设某个值不会为,但实际上它为时。...安全通过在类型系统级别防止这种错误的发生。Dart 的安全类型系统区分了可类型和非类型。例如,String 类型的对象不能为 null,而 String? 类型的对象可以为 null。...Dart 会在编译时检查代码,确保所有的非类型的变量在使用之前都已经被初始化,并且不会被赋值为 null。 如何在Dart中使用安全?...使用Dart安全主要涉及到两个方面:理解可和非类型,以及如何处理可能为的值。 可和非类型安全中,所有类型默认都是非的。...例如,如果你声明一个 String 类型的变量,Dart会假设它永远会为。如果你想声明一个可以为的 String,你需要在类型后面加上 ?,如 String?。

    24111

    C# - 为引用类型重定义相等性

    这个采用了Resharper生成的方法,以前说过,就不再介绍了。 最佳实践还要求重写C#的==操作符: ? 当然配套的!=也必须重写。...大部分逻辑都在base.Equals()方法里了,首先如果父类的Equals()方法返回false,那么下面也就不用做啥了。...这里面x和y其实都是BeijingCitizen的实例,但是现在所处的位置是其父类Citizen的==方法里,所以相等性检查会在这里发生,所以这个相等性检查只会检查父类里面的字段,Citizen这个类无法知道其它继承于它的类型...而你也无法在重载操作符来防止上述事情的发生,因为这段代码永远不会调用到你的操作符重载方法。...所以针对引用类型建议实现IEquatable接口。 非得实现的话建议sealed 例如: ?

    73420

    Java 8 - Optional全解

    我们再一次看到这种方式的优点,它通过类型系统让你的域模型中隐藏的知识显式地体现在你的代码中,换句话说,你永远都不应该忘记语言的首要功能就是沟通,即使对程序设计语言而言也没有什么不同。...声明方法接受一个 Optional 参数,或者将结果作为 Optional 类型返回,让你的同事或者未来你方法的使用者,很清楚地知道它可以接受值,或者它可能返回一个值 ---- 使用 Optional...如果你对一个的 Optional 对象调用 flatMap ,实际情况又会如何呢?结果不会发生任何改变,返回值也是个的 Optional 对象。...截至目前为止,返回的 Optional 可能是两种情况:如果调用链上的任何一个方法返回一个 的 Optional ,那么结果就为,否则返回的值就是你期望的保险的名称。那么,你如何读出这个值呢?...毕竟你最后得到的这个对象还是个 Optional ,它可能包含保险的名称,也可能为。 上面,我们使用了一个名为 orElse 的方法,当 Optional 的值为时,它会为其设定一个默认值。

    50922

    .net持续集成单元测试篇之单元测试简介以及在visual studio中配置Nunit使用环境

    推荐的命名方式如下 Should_Return(Throw)_Result(exception)_If(when)But 其中Should表示期待一个结果,Return或者Throw为要测试方法期待的返回结果...如何在VS安装并运行呢?用Nuget是最方便的一种形式了,如下图: ?...单元测试调试 通过以上状态我们知道我们的单元测试失败了,为什么会失败很简单3+4*5/2不等于0,但是很多时候有些结果不是这么显而易见的,我们需要借助单步调试来发现错误,如何对单元测试进行调试呢?....外部依赖的变化往往由于项目本身原因耦合度太高,一时又无法重构但仍然需要单元测试,这时候也可以勉强为之,然而恰当的测试代码导致结果的不稳定是需要避免的....(最为常见的是日期中使用DateTime.Now由于Datetime.Now是变化的导致单元测试结果不可预测,这种情况是需要避免的.)

    3.3K30

    netty系列之:不用怀疑,netty中的ByteBuf就是比JAVA中的好用

    不是因为JDK优秀,而是因为netty的要求有点高。...capacity永远会为负且永远不会改变。 limit是不应读取或写入的第一个元素的索引。 limit永远会为负,也永远不会大于其容量。 position是要读取或写入的下一个元素的索引。...position永远会为负,也永远不会大于其限制。 mark是调用 reset 方法时其位置将重置到的索引。...另外JDK的java.nio.ByteBuffer是依赖于垃圾回收器来进行回收的,但是我们之前讲过了,ByteBuffer有两种内型,一种是HeapBuffer,这种类型是由JVM进行管理的,用垃圾回收器来进行回收是没有问题的...当ByteBuf的引用计数归零的时候,底层的内存空间就会被释放,或者返回到内存池中。

    34220

    netty系列之:不用怀疑,netty中的ByteBuf就是比JAVA中的好用

    不是因为JDK优秀,而是因为netty的要求有点高。...capacity永远会为负且永远不会改变。 limit是不应读取或写入的第一个元素的索引。limit永远会为负,也永远不会大于其容量。 position是要读取或写入的下一个元素的索引。...position永远会为负,也永远不会大于其限制。 mark是调用 reset 方法时其位置将重置到的索引。...另外JDK的java.nio.ByteBuffer是依赖于垃圾回收器来进行回收的,但是我们之前讲过了,ByteBuffer有两种内型,一种是HeapBuffer,这种类型是由JVM进行管理的,用垃圾回收器来进行回收是没有问题的...当ByteBuf的引用计数归零的时候,底层的内存空间就会被释放,或者返回到内存池中。

    33840

    必知必会——关于SQL中的NOT IN优化

    如果不是您想要的结果,我将在这里告诉您如何解决。 首先,一个简单的情况:如果“ x”和“ y”是使用NOT NULL子句创建的列,则它们永远会为NULL。让我们考虑其他情况。...这是一张房屋清单表,我们都知道用于房屋加热的能源类型包括(“煤”,“木材”,“天然气”等,或者不加热时为NULL)。 查看所有用煤炭或木材加热的房屋: ? 查看其他房屋: ?...因此,就我的意图而言,NULL不可能是煤炭或木材,因此我希望IN返回A,并且我希望NOT IN返回A。 那么,应该怎么做才能使NOT IN表现出预期的效果? 简单!...这将让IN返回FALSE或UNKNOWN的房屋通过;因此,A和B会如我所愿地通过。 “ NOT IN(子查询)”也会发生相同的问题。让我们添加此表: ? 查询加热产生二氧化碳的房屋: ?...),因为NOT IN与NULL的行为与关系代数中反联接的定义匹配。

    4.8K40

    Lambda Optional使用

    在实际使用过程中,你会发现 Optional 的灵活性有时候会让你想用在任何可能出现null的地方,不过凡事都有套路可循,只要清楚利弊就知道如何选择。...orElse() 作用:如果有值就返回执行,否则如果值为null,也会执行orElse(); 这种做用是相当于在特定场景下的用法可以用它来代替if..else..来完成很简洁的逻辑判断。...Optional 能不能当作返回出参,返回给外部调用。 先说第一个问题,意义在于,Optional 本身不会为 null,不会在被调用时出现指针而导致异常。...套路1 返回null 保证返回的数据中绝对返回null,保证不会因为null引起不可预见的异常。...结合 orElse,来保证如果下面的 list 中查出的数据是null,就返回一个的ArrayList。 这种写法简单实用。

    33021
    领券