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

naw*_*fal 15 .net c# overriding default

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

print(default(int) == 0) //true
Run Code Online (Sandbox Code Playgroud)

同样,如果我有一个自定义对象,它的默认值将为null.

print(default(Foo) == null) //true
Run Code Online (Sandbox Code Playgroud)

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

例如,像这样:

public static override Foo default()
{
    return new Foo();
}
Run Code Online (Sandbox Code Playgroud)

这不会编译.谢谢..

dkn*_*ack 23

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

更多信息


nne*_*neo 12

看起来不像.从文档:

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


Meh*_*hin 6

坦率地说,这不是一个真正的答案,而是一个简单的提及.如果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;

}
Run Code Online (Sandbox Code Playgroud)
[TestClass]
public class FooTest
{

    [TestMethod]
    public void TestDefault()
    {
        var o = default(Foo);

        Assert.AreEqual("Default text...", o.Text);
    }

}
Run Code Online (Sandbox Code Playgroud)