我有幾種方法總是在“用戶”型別的引數中檢查空值。我不想多次撰寫這種模式,而是想利用 C# 屬性。
public bool HasPendingBasket(User user)
{
if (user == null)
{
return false;
}
// Code ..
}
public void AddUser(User user)
{
if (user == null)
{
return;
}
// Code ..
}
// Many more methods like above
我想知道這是否可以寫成這樣的:
public bool HasPendingBasket([NotNullReturn(false)] User user)
public void AddUser([NotNullReturn(null)] User user)
// Or
[NotNullReturn(false)]
public bool HasPendingBasket(User user)
[NotNullReturn(null)]
public void AddUser(User user)
我在 Microsoft 檔案中閱讀,他們提到
但是,您創建的任何屬性僅充當元資料,不會導致執行屬性類中的任何代碼。您可以在代碼中的其他地方對元資料采取行動(本教程稍后會詳細介紹)。
這里
所以聽起來屬性不能做我正在尋找的東西,因為它只充當元資料。我想知道我的理解是否正確。
此外,如果是正確的,是否有更好的方法來進行空值檢查,而不必在任何地方撰寫該模式?
uj5u.com熱心網友回復:
我認為您需要的是 Null Object 模式。
uj5u.com熱心網友回復:
您正在尋找一種稱為 Aspect-Oriented Programming (AOP) 的范例,特別是攔截器模式。
如果您將autofac其用作依賴注入容器,那么您將“免費”獲得它。Autofac 檔案
但是,它在引擎蓋下使用Castle DynamicProxy,因此您可以使用內置容器自行滾動。撰寫代理處理程式來攔截并檢查攔截的類/方法上的任何屬性。城堡檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/419496.html
標籤:
