- 浏览: 3052809 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (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 22408(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 3312之前正好发了些帖子是关于CLR里的委托的,然后看到老赵说事件也 ... -
要让CLR挂掉的话(第二弹)……
2009-09-04 03:26 12879(Disclaimer:如果需要转 ... -
要让CLR挂掉的话……
2009-09-02 16:53 4785(Disclaimer:如果需要转载请先与我联系。 作者:Re ... -
趣味编程:函数式链表的快速排序
2009-08-31 08:53 3450(恢复自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 2603悲剧啊……前几天有个同学不停问我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 1639原文作者: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 4063在前一帖里,我用到了下面三处Expression.Call() ... -
看到一个关于ref参数与多态的问题,记一下
2009-05-18 10:48 1944刚才读到Alan McGovern的一帖,问为什么形式参数是r ... -
C#的+=运算符两例
2009-05-06 18:18 2041刚偶尔看到了justjavac写的java解惑 - 半斤八两( ...
相关推荐
使用javax Nullable注解必须使用的jar包
在Laravel框架中,`nullable`是一个非常实用的特性,特别是在处理数据模型(Eloquent)时,它允许我们在不抛出异常的情况下对可能为null的对象进行链式调用。这个特性提高了代码的健壮性和可读性,因为它使得开发者...
### Nullable转换问题 在.NET框架中,`Nullable<T>`是一种非常重要的类型,它允许值类型存储空值。这对于处理数据库中的可选字段等场景极为有用。本文将通过一个具体的示例来详细介绍`Nullable`类型的使用及其转换...
在Laravel框架中,`nullable`是一个非常实用的特性,特别是在数据库交互和Eloquent ORM(对象关系映射)中。这个特性允许我们在定义模型的属性时声明某些字段是可以为空的,即使在数据库层面这些字段被定义为非空。...
所以补充上了,随后又同事问我在代码中发下了@Nullable注解不知道怎么用?脑子是个好东西,可以审核没带啊!哪有广告? 起初,以为这么简单的一个常用注解还不了解吗? 用法 @Nullable可以用在方法、属性、参数上...
根据给定的信息,本文将详细解释如何通过 LINQ 来操作 DataTable 或 DataSet,并解决其中遇到的一些常见问题,例如处理 Nullable 类型以及如何为 GridView 控件添加空行。 ### 一、理解 LINQ to DataTable or ...
在Laravel框架中,`nullable`是一个非常关键的概念,它主要与数据库字段的验证和迁移有关。本压缩包文件“Laravel开发-nullable .zip”可能包含关于如何在Laravel项目中处理可空数据的教程、示例代码或相关资源。在...
现在,通过使用Nullable Type,我们可以明确指定某个参数或返回值可以为null,从而使代码逻辑更加清晰和健壮。 在PHP5时代,虽然函数的参数已经支持了类型提示(typehint),但参数必须是非null的,例如int, string...
java运行依赖jar包
自iOS 9以来,Apple引入了几个新的关键字来帮助开发者更好地声明和管理可空性,这些关键字包括`nullable`、`nonnull`、`null_resettable`以及`_Null_unspecified`。本文将详细讲解这些关键字的用途、用法和注意事项...
在C#编程语言中,可空类型(System.Nullable)是一个重要的特性,它允许开发者为原本不可为空的值类型(如int、double等)赋予null值。...理解并恰当使用可空类型是成为熟练C#程序员的关键技能之一。
可变参数、不定参数Demo源码,nullable、nonnull、_Nullable 等区别Demo源码。 博客地址: https://dcsnail.blog.csdn.net/article/details/79107962 https://dcsnail.blog.csdn.net/article/details/79230770
一个快速而肮脏的项目,用于读取带有@Nullable批注的类文件并输出相应的Java源代码。 仅生成存根类,并且仅包含具有@Nullable批注的方法。 生成的源代码是格式正确的Java,但不能替代原始类文件。 至少可以在中分发...
在这个问题中,我们遇到了在添加外键时遇到的“non-nullable field”错误。这通常发生在尝试迁移(migrate)模型变更到数据库时,Django提示你需要为外键提供一个默认值,即使Django本身并没有强制要求所有外键都有...
Nullable<int> i = new Nullable(3); int i; //默认值0 int? ii; //默认值null ?? : 双问号 可用于判断一个变量在为 null 时返回一个指定的值。 接下来我们详细说明。 C# 可空类型(Nullable) C# 提供了一个特殊的...
Laravel的可空数据库字段 通常,未分配值的数据库字段默认为null 。 在创建具有外键约束的记录时,这一点尤其重要。...为了使用此特征,请将其导入到Eloquent模型中,然后将受保护的$nullable属性设置为一个字
ELinq 是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型,支持根据实体类自动建库建表建关系,支持根据数据库通过T4模版自动生成实体代码,对Linq的谓词提供了完美的支持,旨在让绝大部份...