簡體   English   中英

當方法返回無效結果時,我應該拋出什么異常

[英]What exception should I throw when method returns invalid result

我想知道當被調用的方法返回意外結果時,我應該拋出什么異常(在.NET中有什么)。

例如,想象我有工廠的情況:

public abstract class Factory
{
    public A Create()
    {
        var a = new A();
        var b = CreateDependencyOfA();
        a.Something = b.Property;
    }

    protected abstract B CreateDependencyOfA();
} 

我記錄該類並創建假設CreateDependencyOfA不返回null(或其他任何東西,即假設該值介於1和5之間的整數)。

當實現違反此契約時,我應該怎么做(在這種情況下返回null)。 在.NET中是否有為此目的設計的任何異常類型? 我知道有一些ArgumentExceptions,但據我所知,它們是輸入參數。 輸出參數是否相同?

我問這個是因為我相信輸入和輸出參數之間存在某種對稱性,但我不知道任何輸出異常。

如果方法返回一個永遠不會返回的值,則表示程序中存在內部邏輯錯誤。 這種錯誤(即代碼設計為規范時必須永遠不會發生的情況)最好由斷言處理:

var dependency = Factory.CreateDependencyOfA();
Debug.Assert(dependency != null, "Factory returned null dependency.");

注意:使用斷言假定您正在檢查自己方法的輸出。 換句話說,您擁有Factory及其所有實現,您編寫了所有CreateDependencyOfA方法,並且您知道這些方法不能返回null

如果Factory的實現是由其他人編寫的插件,則不應使用斷言。 而是使用InvalidOperationException指示當前狀態(即,提供給您的Factory實現)無效。

您可能需要查看代碼合同: http//msdn.microsoft.com/en-us/library/dd264808(v = vs.110).aspx

例如,您的CreateDependencyOfA方法可能包含合同,例如:

Contract.Ensures(Contract.Result<B>() != null);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM