如果我从一个值类型声明一个可为空的值(通过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. 类型的“变量”,类型为“可变”
- 2. 在C++中,我可以将类类型表示为变量吗?
- 3. C#可为空类型和值属性
- 4. c/C++中的左移或右移操作可以使变量变为空吗?
- 5. 赋值后的变量值仍然为零
- 6. 为什么变量仍然稳居
- 7. VB.NET:检查变量是否为Guid? (可为空)类型
- 8. 可为空类型作为通用参数吗?
- 9. 为什么SQL变量仍然保持以前的值?
- 10. 可为空的值类型只是包装常规值类型?
- 11. 对于可为空的非引用类型变量需要new()吗?
- 12. jQuery的类型函数作为变量
- 13. 可为空的变量类型 - .value成员
- 14. 如何将空值赋给C#中的非空类型变量?
- 15. C#转换为可空类型?
- 16. C#:可为空类型(int?)对象?
- 17. 为什么prevoius值在reinitialaize变量后仍然存在 - PHP
- 18. Swift变量在赋值后仍然为0?
- 19. 我们仍然可以使用routes = {routes}作为react-router v4吗?
- 20. 指针可以作为变量吗?
- 21. 为什么“无法投射类型值”错误仍然存在?
- 22. 索引值仍然为0
- 23. 我可以为C中的变量传递多个值吗?
- 24. 可以赋值为空吗?
- 25. VHDL。为什么我的“rdy”值不变为1?仍然困惑
- 26. 不可空值转换为可空类型的基本知识
- 27. 初始化泛型类作为变量
- 28. 强制Type变量的值作为特殊的基类型
- 29. Mysql变量值为空
- 30. C++可变多类型有可能吗?
您是否尝试过自己测试这些东西? – 2010-01-03 03:24:30