如何在C#中覆盖默认值(T)?

可能重复:
如何更改默认(T)在C#中返回的内容

print(default(int) == 0) //true 

同样,如果我有自定义对象,其默认值将为null。

 print(default(Foo) == null) //true 

我可以为default(Foo)自定义值而不是null吗?

例如,像这样:

 public static override Foo default() { return new Foo(); } 

这不会编译。 谢谢..

您无法覆盖默认(T)关键字。 对于引用类型,它始终为null,对于值类型,它始终为零。

更多信息

  • MSDN – 通用代码中的默认关键字(C#编程指南)

看起来不像。 从文档 :

default …将为引用类型返回null,为数值类型返回零。 对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型。

坦率地说,这不是一个真正的答案,而是一个简单的提及。 如果Foo是一个结构,那么你可以有这样的东西:

 public struct Foo { public static readonly Foo Default = new Foo("Default text..."); public Foo(string text) { mText = text; mInitialized = true; } public string Text { get { if (mInitialized) { return mText; } return Default.mText; } set { mText = value; } } private string mText; private bool mInitialized; } 

 [TestClass] public class FooTest { [TestMethod] public void TestDefault() { var o = default(Foo); Assert.AreEqual("Default text...", o.Text); } }