属性或索引器“NodaTime.LocalDateTime.Month”不能分配给 - 它是只读的

本文关键字:分配 不能分 只读 不能 索引 NodaTime Month LocalDateTime 属性 | 更新日期: 2024-09-24 05:03:59

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Reflection;
using System.IO;
using NodaTime;
namespace MyApp
{
    public partial class MainForm : Form
    {
        public class Foo
        {
            private LocalDateTime date_time;
            public Foo(string data)
            {
                Int32 i;
                char[] delimiters = { ',', '/', ':' };
                string[] tokens = data.Split(delimiters);
                if( Int32.TryParse(tokens[0], out i ))
                {
                    date_time.Month = i;
                }
            }
        };
        public MainForm()
        {
            InitializeComponent();
        }
    }
}

我设置的行date_time。月份到 i 是我在标题中调用错误的地方 - 属性或索引器无法分配给 - 它是只读的。 我搜索了许多类似的帖子,但找不到解决方案。 任何帮助将不胜感激。 提前感谢!

属性或索引器“NodaTime.LocalDateTime.Month”不能分配给 - 它是只读的

如果LocalDateTime是可变的,你可以这样做:

LocalDateTime x = new LocalDateTime();
x.Year = 2016;
x.Month = 4;
x.Day = 20;
x.Hour = 11;
x.Minute = 30;

但是,它不是可变的。 它是不可变的。 因此,您必须这样做:

LocalDateTime x = new LocalDateTime(2016, 4, 20, 11, 30);

在代码中,您已经定义了类中的字段date_time,并将其声明为 LocalDateTime 类型,但从未为其赋值。 由于此类型是 struct ,因此将使用其默认值进行初始化,对于LocalDateTime1970-01-01 00:00:00

然后,您尝试设置一个属性,就好像该值是可变的,但它是不可变的,因此没有资源库。 相反,您需要为字段分配LocalDateTime结构的新实例,类似于我上面显示的方式。

还要认识到 Noda Time 内置了广泛的解析功能,因此无需将字符串拆分为组件或尝试将它们解析为整数。例如:

using NodaTime;
using NodaTime.Text;
...
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("M/d/yyyy HH:mm:ss");
var result = pattern.Parse("4/20/2016 11:30:00");
if (!result.Success)
{
    // handle error
}
LocalDateTime ldt = result.Value;

如果要解析大量值,则可以在静态变量中保留pattern实例,以避免每次都必须创建它。 这提供了比等效的 BCL 方法(如 DateTime.ParseExact(更好的性能。