Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 参数约束是如何工作的?_C#_Constraints - Fatal编程技术网

C# 参数约束是如何工作的?

C# 参数约束是如何工作的?,c#,constraints,C#,Constraints,当你做以下事情时,幕后发生了什么: private static void AssertIsNotNull<T>(T x) where T : class{} private静态void断言null(tx),其中T:class{} 使用Win32命名空间中的某些内容是否可能获得相同的效果 我问这个问题的原因是我想知道是否可以在C#1.0中约束一个参数。来检查一个类型是引用类型还是值类型,而不使用泛型(只有在C#2之后才可用) if (typeof(MyType).IsValueT

当你做以下事情时,幕后发生了什么:

private static void AssertIsNotNull<T>(T x) where T : class{}
private静态void断言null(tx),其中T:class{}
使用Win32命名空间中的某些内容是否可能获得相同的效果


我问这个问题的原因是我想知道是否可以在C#1.0中约束一个参数。

来检查一个类型是引用类型还是值类型,而不使用泛型(只有在C#2之后才可用)

if (typeof(MyType).IsValueType)
或者,如果您有对象obj:

if (obj.GetType().IsValueType)

泛型(因此泛型约束)是编译时特性。不能在C#1.0中约束泛型参数,因为C#1.0根本没有泛型。它们与Win32无关。你到底想做什么?它们不是参数约束-它们是泛型约束。如果你想要这些东西的名称,你可以使用“TypeName”这就是C++中调用的。C语言中的泛型不仅是编译时的特性,而且是运行时,而不是C++模板,它们是纯编译时间。友好的建议——有时最好的学习方法是抓取ILISTION或反射器,只需自己查看代码即可。