【发布时间】:2020-06-25 17:55:30
【问题描述】:
我正在尝试为产品中的属性更改做一个接口。在某些情况下,这些值是 int,而在其他情况下,这些值将是 string。 新值是必需的,但有时该字段没有旧值。
类似这样的:
public interface IChangeSuggestion<TValue> {
TValue? OldValue { get; set; } //Line with error
TValue NewValue { get; set; }
}
public class ChangeSuggestionSomeId : IChangeSuggestion<int> {
public int? OldValue { get; set; }
public int NewValue { get; set; }
}
public class ChangeSuggestionName : IChangeSuggestion<string> {
public string OldValue { get; set; }
public string NewValue { get; set; }
}
上面的代码抛出错误: 可空类型参数必须已知为值类型或不可空引用类型。考虑添加“类”、“结构”或类型约束。
编辑
我使用该接口是因为共享批准逻辑,并且类是实体框架的模型
要在实体框架中工作,以下代码可以解决问题:
public interface IChangeSuggestion<TValue> {
TValue OldValue { get; set; }
[Required]
TValue NewValue { get; set; }
int Id { get; set; }
int ProductId { get; set; }
bool? Approved { get; set; }
DateTime? ApprovedOn { get; set; }
string ApprovedById { get; set; }
}
public class ChangeSuggestionSomeId : IChangeSuggestion<int?> {
public int? OldValue { get; set; }
[Required]
public int? NewValue { get; set; }
public int Id { get; set; }
public int ProductId { get; set; }
public bool? Approved { get; set; }
public DateTime? ApprovedOn { get; set; }
public string ApprovedById { get; set; }
}
这是因为我使用的是在 SaveChanges 上运行验证的实体框架,但我认为严格来说 NewValue 应该是 int 而不是 int?
【问题讨论】: