c# - 为属性设置默认值

标签 c# .net

是否可以在没有属性主体的情况下设置默认值?最好有注释。

[SetTheDefaultValueTo(true)]
public bool IsTrue { get; set; }

[SetTheDefaultValueTo(false)]
public bool IsFalse { get; set; }

public void Something()
{
    var isTrue = this.IsTrue;
    var isFalse = this.IsFalse;
}

最佳答案

不,没有内置方法可以使用元数据设置属性值。您可以使用某种工厂来构建具有反射的类的实例,然后可以设置默认值。但简而言之,您需要使用构造函数(或字段 setter ,被提升到构造函数)来设置默认值。

如果您的构造函数有多个重载,您可能需要查看 constructor chaining .

使用 C# 6+,你可以做这样的事情......

public string MyValue { get; set; } = "My Default";

哦,它变得更有趣了,因为人们甚至要求这样的东西......

// this code won't compile!
public string MyValue {
    private string _myValue;
    get { return _myValue ?? "My Default"; }
    set { _myValue = value; }
}

...优点是您可以控制字段的范围,使其只能在属性代码中访问,这样您就不必担心类中的其他任何事情在不使用 getter/setter 的情况下使用状态.

关于c# - 为属性设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071359/

相关文章:

c# - IEnumerable FirstOrEmpty 扩展

C# ListBox 更新项目更改

.net - 模拟框架(在 .Net 中)如何创建模拟对象?

.net - .NET7 升级后,在本地运行 Azure 函数会出现 "No runtime"错误

c# - 了解连接字符串属性

C# 等效于 PHP http_build_query

c# - 在 EF4 中更改数据库表名称( Entity Framework 4)

c# - 为什么只有一些子元素的属性由其父元素定义

.net - 没有 SOAPAction header 的 WCF Web 服务

c# - 我需要哪些 SOAP/WS-Security/WS-Addressing/etc 来发送这条消息