提问人:Perringaiden 提问时间:11/14/2023 最后编辑:marc_sPerringaiden 更新时间:11/14/2023 访问量:24
声明方法始终引发异常的属性,以满足BC42105
Attribute to declare that a method always throws an exception, to satisfy BC42105
问:
编译器警告 当函数中存在不返回值或引发异常的分支时,会发生编译器警告BC42105。但是,我有一种情况,我在调用的方法中抛出异常,它总是会抛出。代码分析似乎没有检测到这一点,我找不到可以确保不必手动抑制编译器错误的属性。
在 VB.Net 中,使用 .NET 7.
所需代码:
Private ReadOnly cgItems As IDictionary(Of Integer, Item)
Public Function GetItem(itemID as Integer) As Item
Dim item as Item = Nothing
If cgItems.TryGetValue(itemID, item) tThen
Return item
Else
ThrowItemDoesntExist(itemID)
End If
End Function
Private Sub ThrowItemDoesntExist(itemID As Integer)
Throw New ArgumentException($"The Item ID #{itemID} does not exist.", NameOf(itemID))
End Sub
该方法是从完成此类检查的多个位置调用的,因此使用单个方法可以实现一致性和轻松的代码维护。ThrowItemDoesntExist
但是,会引发BC42105警告,因为 无法指示它始终抛出 .GetItem
ThrowItemDoesntExist
Exception
当前解决方法
我目前的解决方法是使用该属性,这有点笨拙。它有效,但感觉不对。<DoesNotReturn>
CodeAnalysis
Imports System.Diagnostics.CodeAnalysis
Private ReadOnly cgItems As IDictionary(Of Integer, Item)
Public Function GetItem(itemID as Integer) As Item
Dim item as Item = Nothing
If cgItems.TryGetValue(itemID, item) tThen
Return item
Else
Return ThrowItemDoesntExist(itemID)
End If
End Function
<DoesNotReturn>
Private Function ThrowItemDoesntExist(itemID As Integer)
Throw New ArgumentException($"The Item ID #{itemID} does not exist.", NameOf(itemID))
End Sub
谁能提出更好的方法?
答: 暂无答案
评论
Returns ThrowItemDoesntExist
ThrowItemDoesntExist