如何在 C# 中重写默认值 (T)



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

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

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

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

我可以有一个自定义值来表示default(Foo)而不是空吗?

例如,像这样:

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

这不会编译。谢谢。。

不能覆盖 default(T) 关键字。对于引用类型,它始终为 null,对于值类型,它始终为零。

更多信息

  • MSDN - 泛型代码中的默认关键字(C# 编程指南)

好像不像。从文档中:

default......将为引用类型返回 null,为数值类型返回零。对于结构,它将返回初始化为零或 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);
    }
}

最新更新