如果我从一个值类型声明一个可为空的值(通过Nullable或?符号),它是否仍然遵守值类型的规则(即,默认通过值传递,当它超出范围时解除分配,而不是垃圾收集器运行)还是它变成一个引用类型,因为它实际上是Nullable类型的?C#可为空的变量仍然作为值类型吗?
回答
是的,System.Nullable是一个通用的Struct,即值类型。
我并不是以一种批判的方式来表达它,但我认为一些参考文献会有帮助,就像雅各所做的那样。他们可能会引导读者更深入的信息,使他能够与其他问题进行一些联系等等。 – lmsasu 2010-01-03 12:41:28
我倾向于只提供文章,不能访问使用谷歌我感觉幸运的功能。提供谷歌结果编号1的链接是无意义的练习。 – 2010-01-03 13:29:26
可为空的值类型本质上只是一个值类型的结构包装,它允许将它们标记为null。
是这样的:
struct Nullable<T>
{
public T Value;
public bool HasValue;
}
我相信它实际上比这更复杂的引擎盖下,编译器确实很多不错的东西给你,让你可以写例如if(myInt == null)
。但是,是的,它们仍然是价值类型。
的文档是在这里:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
正如你所看到的,文档描述为“可空结构”,这表明它是值类型。此外,该文档还给出了该类型声明的第一行:
public struct Nullable<T> where T : struct, new()
再次显示该类型是值类型。
- 1. c#类变量在调用函数后仍然为空
- 2. 类型的“变量”,类型为“可变”
- 3. 作为泛型的可为空类型
- 4. 变量(form.onsubmit)在赋值后仍然为空
- 5. 在C++中,我可以将类类型表示为变量吗?
- 6. C#可为空类型和值属性
- 7. c/C++中的左移或右移操作可以使变量变为空吗?
- 8. 实体框架:设置为空的假,但类型仍然是可空
- 9. 为什么声明为类成员的const变量仍然可以修改?
- 10. 为什么我的类变量在我赋值之后仍然为零? (Ruby)
- 11. C#处理的类型不允许来自F#的null仍然可以为空吗?
- 12. 变量类型为远程类空
- 13. 赋值后的变量值仍然为零
- 14. 我可以在Objective-C中将协议作为类变量吗?
- 15. shell脚本中的循环问题后,变量仍然为空
- 16. C++:从变量值作为变量
- 17. VB.NET:检查变量是否为Guid? (可为空)类型
- 18. 可为空类型作为通用参数吗?
- 19. 为什么变量仍然稳居
- 20. 分配给对象后,变量仍然为空
- 21. 我可以让一个可为空的变量为负数吗?
- 22. 我可以传递一个泛型变量的类型作为参数吗?
- 23. 为什么SQL变量仍然保持以前的值?
- 24. 可空类型和.HasValue仍然会抛出一个空异常
- 25. 变量可以同时为空而不为空吗?
- 26. 可为空的值类型只是包装常规值类型?
- 27. 对于可为空的非引用类型变量需要new()吗?
- 28. C++ - 为什么`const类型和变量`作为函数输入?
- 29. C# - 传递变量类型为递归工厂作为通用
- 30. 可选绑定尝试?并作为?仍然生成可选类型
您是否尝试过自己测试这些东西? – 2010-01-03 03:24:30