C# 属性或索引器';NodaTime.LocalDateTime.Month';无法分配给--它是只读的

C# 属性或索引器';NodaTime.LocalDateTime.Month';无法分配给--它是只读的,c#,nodatime,C#,Nodatime,我将date_time.Month设置为I的那一行是我在title中调用错误的地方-属性或索引器无法分配到-它是只读的。我已经搜索了许多类似的帖子,但没有找到解决方案。任何帮助都将不胜感激。提前谢谢 如果LocalDateTime是可变的,您可以这样做: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; usin

我将date_time.Month设置为I的那一行是我在title中调用错误的地方-属性或索引器无法分配到-它是只读的。我已经搜索了许多类似的帖子,但没有找到解决方案。任何帮助都将不胜感激。提前谢谢

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

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();
        }
    }
}
但是,它是不可变的。它是不变的。因此,您必须这样做:

LocalDateTime x = new LocalDateTime();
x.Year = 2016;
x.Month = 4;
x.Day = 20;
x.Hour = 11;
x.Minute = 30;
在代码中,您在类中定义了一个字段
date\u time
,并将其声明为
LocalDateTime
类型,但从未为其赋值。由于此类型是一个
struct
,将使用其默认值初始化is,对于
LocalDateTime
而言,它是
1970-01-01 00:00:00

然后尝试将属性设置为值是可变的,但它是不可变的,因此没有setter。相反,您需要将
LocalDateTime
结构的一个新实例分配给该字段,类似于上面所示

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

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

如果要解析很多值,可以在静态变量中保留
模式
实例,以避免每次都要创建它。这比等效的BCL方法(如
DateTime.ParseExact

提供了更好的性能,您想要什么解决方案?阅读文档?此属性为只读。您不能通过更改其
Month
属性来修改该值,请尝试创建一个新实例。从逻辑上讲,更改日期是没有意义的。日期和时间是不变的。您需要创建新日期的新表示形式。如果您能告诉我们您正在尝试执行的操作,我相信我们可以帮助您。因此,请创建一个新的
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;