where T : System.ValueType? 例:
为什么我不能做以下事情?
// Defined in a .Net class
public void bar<T>(T a) where T : ValueType {...}
// Defined in my class
public void foo<T>(T a) where T : ValueType
{ bar<T>(a); }
Run Code Online (Sandbox Code Playgroud)
使用struct而不是ValueType有什么区别?
// Defined in my class
public void foo<T>(T a) where T : struct
{ bar<T>(a); }
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 66
使用之间有两点不同
where T : struct
Run Code Online (Sandbox Code Playgroud)
和
where T : ValueType
Run Code Online (Sandbox Code Playgroud)
T为ValueType本身,这是一个引用类型.T成为可以为空的值类型这些差异中的第一个几乎不是你想要的.第二个偶尔会有用; Nullable<T>是它满足无论是有点奇怪where T : struct,也不where T : class约束.
更有用的是约束
where T : struct, System.Enum
Run Code Online (Sandbox Code Playgroud)
这是C#所禁止的,没有任何理由我可以告诉.有关详细信息,请参阅我的博客文章和Unconstrained Melody项目.
Rex*_*x M 13
ValueType不是值类型的基类,它只是盒子化时值的容器.由于它是一个容器类,而不是您想要使用的实际类型的任何层次结构,因此它不能用作通用约束.
使用struct作为通用约束在功能上等同于"ValueType"约束.在.NET中,struct是值类型.
| 归档时间: |
|
| 查看次数: |
20265 次 |
| 最近记录: |