指定参考类型的默认值

问题描述:

正如我所了解的默认(对象)其中'对象'是任何引用类型总是返回null,但我可以指定默认值是什么?例如,我想要默认(对象)==新对象();指定参考类型的默认值

+1

不,这是不可能的。你能告诉我们这里的最终目标,也就是为什么你会想要这个功能吗? – Ani 2010-11-01 02:28:24

+0

不,你为什么需要这样做?如果对象为空,只需分配一个新的! – 2010-11-01 02:28:59

+1

只是为了能够说FirstOrDefault()并且永远不会得到空值。猜猜我只会写一个新的扩展方法。 – 2010-11-01 02:30:08

default(type)总是返回同样的事情 - “零”删除“该类型的版本。对于引用类型,这是一个始终设置值为零的对象的句柄 - 相当于null。对于值类型,这总是所有成员设置为零的结构。

有没有办法来覆盖这种行为 - 语言规范是这样设计的。


编辑:关于你的评论:

只是为了能够说FirstOrDefault(),从来没有得到一个空。

我不会在任何情况下推荐这个。用户期望FirstOrDefault()失败时返回null。最好是写自己的扩展方法:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new() 
{ 
    return sequence.FirstOrDefault() ?? new T(); 
} 

对不起,我不是乔恩斯基特...

但无论如何,答案是“不,你不能”

+6

通常Jon Skeet解释了为什么(或者为什么不在这种情况下):) – PostMan 2010-11-01 02:38:53

+0

@PostMan,就像我说过的,我不是Jon Skeet;)。无论如何,我不认为这里有任何解释......这是不可能的。 – 2010-11-01 02:54:02

+0

只要做出来,你会没事的:)但是,我同意,除了你不能解释外,没有任何解释。 (除了这是一个设计决定) – PostMan 2010-11-01 03:44:24