我正在使用 LinQ2SQL
并实现了一个用户控件,使用数据绑定来编辑不同实体的价格。
public partial class PriceControl<TDataSource, TPricesVat, TPriceNet, TPriceGross>
: ANotifyPropertyXtraUserControl, IPriceControl<TDataSource, TPricesVat, TPriceNet, TPriceGross>
where TDataSource : class, INotifyPropertyChanging, INotifyPropertyChanged
where TPricesVat : struct
where TPriceNet : struct
where TPriceGross : struct
{
}
我喜欢同时使用
decimal
和decimal?
两种类型,在代码语句中根据需要进行处理。但是,C#不接受decimal?
以便这些类型限制。我发现Nullable<T>
也是一个struct
,但不像struct
一样得到完全支持。是否有可能在类型约束中实现这一点?我估计答案是“不可以”。但或许……
补充说明:删除
TPricesVat
,TPriceNet
和TPriceGross
的限制后,我可以正常编译此代码,但我无法在设计时强制允许的通用类型。编辑:由于工作原因,我提出了这个问题。但是我很快就离开了,无法以适当的解决方案关闭这个问题。为了尊重这个问答平台,我在这里留下了这个编辑。
感谢所有有用的提及。
where T : decimal, decimal?
而不是where T : struct
。 - FlorianInvalid constraint type. A type used as a constraint must be an interface, a non-sealed class or a type parameter.
- codekandiswhere T: decimal
的意思是,“T 是 decimal 或任何 decimal 的子类型”,但这并没有多大意义,因为结构体不支持继承。约束where T: U
仅在U
是类或接口类型时有效。此外,您只能针对一个约束指定一个类型,where T: U, X
是无效的。 - dcastroTPricesVat
、TPriceNet
和TPriceGross
的限制让我能够正确编译此代码,但我无法强制在设计时使用允许的泛型类型。 - codekandis