我正在嘗試創建一個界面,該界面將向資料庫物體添加一列,該物體將用于跟蹤用戶所做的更改。
public interface IAuditEntity<TKey>
{
TKey? UpdatedBy { get; set; }
}
該介面將由不同的應用程式使用。因此,一個應用程式可以使用整數作為鍵,另一個應用程式可能使用字串。
但是,由于它是可空型別,我收到以下錯誤:必須知道可空型別引數是值型別或不可為空的參考型別。考慮添加“類”、“結構”或型別約束。
我怎樣才能做到這一點,以便我可以同時使用值和參考型別?所以真的是 int 或 string 嗎?
謝謝。
uj5u.com熱心網友回復:
如果您的目標只是擁有一個可以是參考型別、值型別或可為空值型別的泛型型別引數。只需洗掉?
public interface IAuditEntity<TKey>
{
TKey UpdatedBy { get; set; }
}
public class Bob : IAuditEntity<int?>
{
public int? UpdatedBy { get; set; }
}
如果您嘗試使用可為空參考型別功能,則需要提高專案的版本
<LangVersion>9.0</LangVersion>
<nullable>enable</nullable>
請注意:這并不完全受支持,并且可能會導致某些語言功能出現問題,并且并非所有屬性都可用。
如果你的目標是使用參考型別和值型別,其中泛型引數被稱為是一個不可為空值型別和參考型別可以是null,在C#8或更高版本可以使用notnull 約束,而不?
public interface IAuditEntity<TKey> where TKey : notnull
{
TKey UpdatedBy { get; set; }
}
如果您想使用參考型別和值型別,其中泛型引數已知不可為空,并且參考型別可以null并且也可以使用可空參考型別功能,則可以使用notnull 約束和可空型別運算子? C# 9或以后
public interface IAuditEntity<TKey> where TKey : notnull
{
TKey? UpdatedBy { get; set; }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350004.html
上一篇:java泛型<T擴展>
