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