c# - 有没有办法将方法标记为确保 T 不为空?

标签 c# attributes null

例如,如果我有一个定义为...的方法

T Create()
{
    T t = Factory.Create<T>();

    // ...

    Assert.IsNotNull(t, "Some message.");
    // -or-
    if (t == null) throw new Exception("...");
    // -or- anything that verifies that it is not null
}

...我正在从其他地方调用该方法...

void SomewhereElse()
{
    T t = Create();
    // >><<
}

...在>><< ,我知道(意思是我,写这篇文章的人)t保证不为空。有没有一种方法(可能是我尚未找到的属性)将方法标记为确保它返回或以其他方式传递出去的引用类型(可能是 out 参数)由内部逻辑保证不为空?

我不得不羞怯地承认 ReSharper 是我关心的主要原因,因为它突出显示了它认为可能导致 InvalidOperationException 的任何内容。或 NullReferenceException .我想要么它正在阅读我可以在我的方法上标记的东西,要么它只知道 Assert.IsNotNull ,简单的 bool 检查或其他一些东西将消除某些东西为 null 的可能性,并且它可以消除高亮。

有什么想法吗?我只是成为我的天哪-resharper-highlights-it-I-have-to-fix-it 疾病的受害者吗?

最佳答案

如果 ReSharper 是您关心的原因,那么您可以标记 Factory.Create<T>()用他们的方法 [NotNull]在他们的 web help 中描述的属性

关于c# - 有没有办法将方法标记为确保 T 不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317191/

相关文章:

c# - 在C#中按名称访问PSObject属性

c# - 如何更新状态栏标签上显示的文本

python - 为什么 setattr 和 getattr 允许空格?

javascript - 获取后无法访问属性

c# - Blazor(客户端)StateHasChanged() 不更新页面

C#,使用来自不同类的后台工作人员更新进度条

c# - 当我实现使用 HandlerAttribute 的接口(interface)时,是否可以拦截它?

sql - 将 NULL 值排序到表的末尾

java - 为什么我的 Spring @Autowired 字段为空?

Javascript json,检查所有键是否未定义 ('null' )并设置默认值