c# - 在施工时分配给全部财产
问题描述
如果我在 C# 中有一个自动属性,我可以在类实例化时为其分配一个值,如下所示:
public DateTime DesiredBookingDate { get; set; } = DateTime.Now.Date;
但是,如果我有一个完整的属性,有一个支持字段,我不能这样做:
// This doesn't work
private DateTime _desiredBookingDate;
public DesiredBookDate
{
get => _desiredBookingDate;
set => SetProperty(ref _desiredBookingDate, value);
} = DateTime.Now.Date;
有没有什么方法可以在不使用构造函数的情况下(并且以易于阅读的方式)做这样的事情?
更新:
我一直犹豫是否只将值分配给支持字段的原因是因为我无法确定是否存在任何可能影响INotifyPropertyChange
. 但如果它们编译成相同的,那就没问题了。
解决方案
您可以将支持字段设置为您的值。
private DateTime _desiredBookingDate = DateTime.Now.Date;
public DesiredBookDate
{
get => _desiredBookingDate;
set => SetProperty(ref _desiredBookingDate, value);
}
如果您需要执行任何INotifyPropertyChanged
功能,可以从构造函数中调用 setter。
仅供参考,我将您的第一个 auto 属性示例放入一个简单的应用程序并使用了 IL Spy,它吐出了以下内容:
internal class Program
{
public DateTime DesiredBookingDate
{
get;
set;
}
[STAThread]
private static void Main()
{
}
public Program()
{
this.<DesiredBookingDate>k__BackingField = DateTime.Now.Date;
base..ctor();
}
}
推荐阅读
- validation - 如何仅使用请求在没有插件的情况下验证 AWS 无服务器架构
- python - 如何使用 pymongo 按 13 位 NumberLong 时间字段进行搜索
- r - 如何在 i 中使用 data.table 的 .N?
- django - 如何使用 django-ratelimit 或节流设置多个速率限制,每 10 秒,每 10 分钟,每 1 天?
- javascript - 如何在javascript中计算字符串中的数字?
- mysql - mysql变量作为SQL脚本中的表名
- rust - 如何为 32 位 little-endian PowerPC 处理器编译 rustc?
- python - 构建一个函数以根据截止值删除数据集中的最小值和最大值?
- java - 如何使用最新版本的计费客户端正确导入 BillingResponse (billing:2.0.1)
- matlab - 将灰度 uint8 图像转换为 RGB uint8 图像