試圖避免為我在這個應用程式中的一篇非常簡單的帖子創建單獨的 DTO。我的物體上有一個必需的屬性,它是對另一個物體的參考。這是用戶,稍后由身份驗證/授權獲取并填充。
除了......我無法通過控制器中的實體化,因為它是一個不可為空的屬性。
public class MyModel {
public UserModel User { get; set; } = null!;
}
public IActionResult Submit(MyModel model){
model.User = CurrentUser; // <- can't get here.
}
0:“用戶欄位是必需的。”
我的印象是= null!允許模型實體化而不關心它是“ null”,直到我稍后嘗試使用它?我可能會嚴重誤解該功能。
我非常想:
- 保持此屬性不可為空。
- 無需創建第二個類來處理沒有此屬性的發布資料
這可能嗎?
uj5u.com熱心網友回復:
您需要將該屬性初始化為某個有效值。不可為空的要點是它永遠不能為空。
我唯一的建議是
- 讓該值為空,并按此進行初始化,但如果稍后給出空值,則編輯集合運算子以拋出 ArgumentNullException,
- 定義
User.Null為不存在的User,用于“初始化”,或 - 更改您的類以在初始化期間將值傳遞給 UserModel 并在 Submit 中創建 MyModel 作為輸出引數。
uj5u.com熱心網友回復:
您可以使用默認值。
如果您收到的實體為空,它將創建一個新的實體User,否則它將包含您的非空實體。
public class MyModel {
public UserModel User { get; set; } = new User();
}
uj5u.com熱心網友回復:
如果您使用帶有支持欄位的屬性怎么辦?
public class MyModel {
[CanBeNull]
private UserModel _User = null;
public UserModel User
{
get { return _User ?? throw new System.InvalidOperationException("_User is has not been set yet"); }
set { _User = value; }
}
}
uj5u.com熱心網友回復:
您可能正在使用 Net 6。您可以從專案配置中洗掉可為空的選項。這樣你就不需要做一個愚蠢的作業來將所有默認的 nullable 屬性標記為所有類為 nullable
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>disable</Nullable> <!-- change from enable -->
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443579.html
標籤:C#
