- 浏览: 3015434 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
原来Nullable type是null的时候,以它作为被调用对象是不会得到NullReferenceException的。以前都没发现,得小心点才行……
引用Steve Wellens在CodeProject上发表的C# Nullable Types…Subtlety,
(他这段代码是在ASP.NET里测试的,所以是用Response.Write())
更新:
参照下面的回复:Nullable<T>是值类型,自身不会为null。使执行int? Test2 = null;之后,Test2指向的是一个代表null的Nullable<int>的实例,所以后面自然不会有异常。
嗯,说得没错,后来我也知道了,不过这帖一直忘了更新。多谢提醒 ^ ^
写错了,Test3.
又试了一下的确这样
用Reflector看到是这样的
我试了一下Console.WriteLine(Tests)也不会报错
Tests? 是指string类型的变量赋值为null然后输出么?
要注意单参数的Console.WriteLine()本身是不介意参数是null的,
这个没问题。问题是在.ToString()那里。被调用的对象如果是null的话,这里就会抛NullReferenceException,
这样就有问题了。
但把这个例子里的string换成int?之后又没问题了,所以说诡异……本来Nullable应该跟其它引用类型保持一致的语义才对。
引用Steve Wellens在CodeProject上发表的C# Nullable Types…Subtlety,
int Test1 = 0; // standard value type int? Test2 = null; // nullable value type Object Test3 = null; // reference type Response.Write("Test1: " + Test1.ToString() + "<br />"); Response.Write("Test2: " + Test2.ToString() + "<br />"); //Response.Write("Test3: " + Test3.ToString() + "<br />"); // Output: // // Test1: 0 // correct // Test2: // no exception, what? but it's null! // // If Test3 is allowed to run, we get: // "Object reference not set to an instance of an object."
(他这段代码是在ASP.NET里测试的,所以是用Response.Write())
更新:
参照下面的回复:Nullable<T>是值类型,自身不会为null。使执行int? Test2 = null;之后,Test2指向的是一个代表null的Nullable<int>的实例,所以后面自然不会有异常。
评论
6 楼
kangyiwei
2010-06-11
ToString被重写了
public override string ToString()
{
if (!this.HasValue)
{
return "";
}
return this.value.ToString();
}
public override string ToString()
{
if (!this.HasValue)
{
return "";
}
return this.value.ToString();
}
5 楼
RednaxelaFX
2009-06-04
beyondest 写道
首先看第一句。Nullable<T>是值类型,Test2不可能为null。
嗯,说得没错,后来我也知道了,不过这帖一直忘了更新。多谢提醒 ^ ^
4 楼
beyondest
2009-06-03
这个没有什么诡异的。
int? Test2 = null;
Test2.ToString();
首先看第一句。Nullabla<T>是值类型,Test2不可能为null。
实际上int? Test2 = null执行后,Test2根本不是null,而是栈上一个Nullabla<System.Int32>的实例。所以调用Test2.ToString()不会抛NullReferenceException。
当前Test2的hasValue被初始化为false。如果这时调用Test2的Value,会抛异常。
int? Test2 = null;
Test2.ToString();
首先看第一句。Nullabla<T>是值类型,Test2不可能为null。
实际上int? Test2 = null执行后,Test2根本不是null,而是栈上一个Nullabla<System.Int32>的实例。所以调用Test2.ToString()不会抛NullReferenceException。
当前Test2的hasValue被初始化为false。如果这时调用Test2的Value,会抛异常。
3 楼
garfeildma
2009-04-03
引用
Tests? 是指string类型的变量赋值为null然后输出么?
要注意单参数的Console.WriteLine()本身是不介意参数是null的,
要注意单参数的Console.WriteLine()本身是不介意参数是null的,
写错了,Test3.
又试了一下的确这样
int Test1 = 0; // standard value type int? Test2 = null; // nullable value type Object Test3 = null; // reference type Console.WriteLine(Test1); Console.WriteLine(Test2.ToString()); Console.WriteLine(Test3.ToString());
用Reflector看到是这样的
int num = 0; int? nullable = null; object obj2 = null; Console.WriteLine(num); Console.WriteLine(nullable.ToString()); Console.WriteLine(obj2.ToString());
2 楼
RednaxelaFX
2009-04-03
garfeildma 写道
我试了一下Console.WriteLine(Tests)也不会报错
Tests? 是指string类型的变量赋值为null然后输出么?
要注意单参数的Console.WriteLine()本身是不介意参数是null的,
class Class1 { static void Main(string[] args) { string s = null; System.Console.WriteLine(s); } }
这个没问题。问题是在.ToString()那里。被调用的对象如果是null的话,这里就会抛NullReferenceException,
class Class1 { static void Main(string[] args) { string s = null; System.Console.WriteLine(s.ToString()); } }
这样就有问题了。
但把这个例子里的string换成int?之后又没问题了,所以说诡异……本来Nullable应该跟其它引用类型保持一致的语义才对。
1 楼
garfeildma
2009-04-03
我试了一下Console.WriteLine(Tests)也不会报错
发表评论
-
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22250(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
对象的重量
2011-08-21 17:15 0http://domino.research.ibm.com/ ... -
GetCustomAttribute()每次都返回新Attribute实例
2009-11-10 10:30 0Jeffrey Zhao: 一次失败的尝试(上):原来GetC ... -
委托与方法和隐藏参数
2009-09-07 15:32 3243之前正好发了些帖子是关于CLR里的委托的,然后看到老赵说事件也 ... -
要让CLR挂掉的话(第二弹)……
2009-09-04 03:26 12762(Disclaimer:如果需要转 ... -
要让CLR挂掉的话……
2009-09-02 16:53 4693(Disclaimer:如果需要转载请先与我联系。 作者:Re ... -
趣味编程:函数式链表的快速排序
2009-08-31 08:53 3371(恢复自2009-08-28的备份 ... -
事件处理器导致内存泄漏
2009-08-25 15:03 0Memory leak via event handlers ... -
C# 3.0的类型推导
2009-08-23 12:24 0Howard Dierking: Lambda, Lambda ... -
把lock的意思给弄混了 T T
2009-08-20 17:49 2549悲剧啊……前几天有个同学不停问我Java里的同步问题,今天写C ... -
把IEnumerable<T>和IObservable<T>粘起来?
2009-07-23 03:02 0Channel 9: Expert to Expert: Br ... -
Scott Peterson: Variance, Thy Name is Ambiguity
2009-07-01 23:49 1587原文作者:Scott Peterson 原文地址:http:/ ... -
void无法协变
2009-06-30 11:17 0Eric Lippert The void is invari ... -
同一个表达式算出来的浮点数结果会不相等?
2009-05-30 03:27 0浮点数有很多可把玩的地方。例如下面这段C程序: #includ ... -
C#开始默认引用Microsoft.CSharp.dll
2009-05-20 16:14 0记得VB6的运行时么?留意到VB.NET的程序都需要额外的VB ... -
反射与显式实现接口的方法
2009-05-20 11:43 4002在前一帖里,我用到了下面三处Expression.Call() ... -
看到一个关于ref参数与多态的问题,记一下
2009-05-18 10:48 1908刚才读到Alan McGovern的一帖,问为什么形式参数是r ... -
C#的+=运算符两例
2009-05-06 18:18 1974刚偶尔看到了justjavac写的java解惑 - 半斤八两( ...
相关推荐
使用javax Nullable注解必须使用的jar包
用例子的形式详解了Nullable的用法
Laravel开发-nullable 对对象进行链调用,无论对象是否为空
Laravel开发-laravel-nullable Laravel 5-向模型添加可空列
java运行依赖jar包
主要介绍了PHP7.1新功能之Nullable Type用法,结合实例形式较为详细的对比分析了Nullable Type类型操作的使用技巧,需要的朋友可以参考下
Laravel开发-nullable .zip
(GOOD,PASS)LINQ TO DATATABLE OR DATASET 完美解决方案,可排除DATASET不支持System.Nullable错误,并为GRIDVIEW增加空行.txt
iOS9新出关键字nonnull,nullable,null_resettable,_Null_unspecified 需要注意的一点只能修饰对象,不能修饰基本数据类型. 虽然在项目的代码编写中不会经常用到,不过在调用苹果系统方法的时候还是会经常遇到,需要做...
所以补充上了,随后又同事问我在代码中发下了@Nullable注解不知道怎么用?脑子是个好东西,可以审核没带啊!哪有广告? 起初,以为这么简单的一个常用注解还不了解吗? 用法 @Nullable可以用在方法、属性、参数上...
可变参数、不定参数Demo源码,nullable、nonnull、_Nullable 等区别Demo源码。 博客地址: https://dcsnail.blog.csdn.net/article/details/79107962 https://dcsnail.blog.csdn.net/article/details/79230770
Laravel 表单验证规则:required、present、filled 和 nullable
一个快速而肮脏的项目,用于读取带有@Nullable批注的类文件并输出相应的Java源代码。 仅生成存根类,并且仅包含具有@Nullable批注的方法。 生成的源代码是格式正确的Java,但不能替代原始类文件。 至少可以在中分发...
Nullable<int> i = new Nullable(3); int i; //默认值0 int? ii; //默认值null ?? : 双问号 可用于判断一个变量在为 null 时返回一个指定的值。 接下来我们详细说明。 C# 可空类型(Nullable) C# 提供了一个特殊的...
Laravel的可空数据库字段 通常,未分配值的数据库字段默认为null 。 在创建具有外键约束的记录时,这一点尤其重要。...为了使用此特征,请将其导入到Eloquent模型中,然后将受保护的$nullable属性设置为一个字
null值用来表示数据类型未被赋予任何值,它是一种引用类型;void表示没有类型,或者说是没有任何值。null与void的区别可以认为void是根本没有,而null是一个空箱子,里面什么都没有。
在django的model中建立了如下的类 class UserType(models.Model): name = models.CharField(max_length=40, verbose_name=u'用户类型') ........ def __str__(self): return self.name class UserProfile(...
ELinq 是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型,支持根据实体类自动建库建表建关系,支持根据数据库通过T4模版自动生成实体代码,对Linq的谓词提供了完美的支持,旨在让绝大部份...