簡體   English   中英

C#如何處理GUID返回類型異常?

[英]C# how to handle GUID return type exception?

我有一個帶有以下簽名的方法:

public Guid FindTermIDFromCustomProperty() 
{
     // Logic here to find an item and return the guid 
}

我的問題是,如果在函數中沒有找到任何項目,那么將不會返回GUID - 這不用說了! 但有沒有辦法返回一些平淡的GUID?

更好的是,我可以采用更通用的方法,不僅僅是針對GUID,而且通常在我返回強類型時? 我真的不想將對象用作返回類型,必須有更好的方法。

提前致謝。

要回答你的第一個問題,你可以使用Guid.Empty ,它返回一個保證全為零的guid。

至於你的第二個問題,一種方法是返回一個bool並使用out參數作為參數,bool指示你是否有值。 不是每個人都喜歡使用參數。

public bool FindTermIDFromCustomProperty(out Guid termId) 

你可以返回一個可以為空的Guid,所以如果找不到任何項,你將返回null

public System.Nullable<Guid> FindTermIDFromCustomProperty() 
{
     // Logic here to find an item and return the guid

     if (!found)
     {
         return null;
     }
}

可空類型適用於結構。

引用類型已經可以設置為null。

如果您使用的是.NET 2.0或更高版本,則可以返回可為空的類型。

public Guid? FindTermIDFromCustomProperty() 
{
    // Logic here to find an item and return the guid 
    else
        return null;
}

var guid = FindTermIDFromCustomProperty();
if (guid.HasValue) // or "if (guid != null)"
    DoSomethingWith(guid.Value);

因此,您有兩個選項可以返回

選項1:對於值類型: intdatetime等,您可以返回默認值,( 0, DateTime.minValue, Guid.Empty ),或使用nullable, Guid?, int? 等等,可以返回null 雖然可以為空的是可恥的,但人們往往會因為某種原因而回避它,所以使用它有時取決於你工作的團隊。 我知道那些不使用它們的團隊。 他們認為他們的尷尬和害羞,在這種情況下突然添加它們使它在其余的代碼中突出,因為它不遵循應用程序其余部分的偽標准。 就個人而言,我喜歡無用的,但不是每個人都有同樣的感覺。

對於引用類型,您只需返回null
為集合返回null:關於處理集合的另一個爭論是你應該返回什么。 如果集合中沒有任何內容,您可以返回null,或者您可以返回空列表等。您可以拆分它們意味着不同的東西,但是再一次,您應該遵循程序的其余部分。 你必須要記住的是,許多人忘記了像foreach語句這樣的東西,集合變量調用GetEnumerator() ,如果集合對象為null ,則拋出異常。

選項2:如果找不到您正在尋找的對象,則會拋出一個異常,說明您找不到所需內容。

關於使用哪一方面存在激烈的爭論,一方面返回默認值不會直接警告調用方法沒有找到某些東西,它必須知道返回值實際上不是id(有時候這個不像你想的那么明顯)。 另一方面,拋出異常意味着調用方法必須知道可能會引發異常。 真的取決於你的情況決定哪個是正確的答案。

你可以退回Guid.Empty 或拋出異常(內置的一個或類似ItemNotFoundException自定義)。 或者在return中使用Nullable類型聲明您的方法並返回null:

public Nullable<Guid> FindTermIDFromCustomProperty() 
{
     // Logic here to find an item and return the guid 
}

嘗試使用可空類型。 對於值類型,您可以通過添加?來使它們可為空,例如

詮釋? x = null;

if(x!= null){

}

暫無
暫無

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

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