print(default(int) == 0) //true
同样,如果我有自定义对象,则其默认值为null。
print(default(Foo) == null) //true
我可以为default(Foo)
设置自定义值而不是null吗?
例如,像这样:
public static override Foo default()
{
return new Foo();
}
这不会编译。感谢..
答案 0 :(得分:19)
您无法覆盖默认(T)关键字。对于引用类型,它始终为null,对于值类型,它始终为零。
答案 1 :(得分:11)
看起来不像。来自the documentation:
default
...将为引用类型返回null,为数值类型返回零。对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型。
答案 2 :(得分:5)
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);
}
}