这可能有点棘手。基本上,我有一个类,看起来像这样:
我希望我能做类似的事情,添加日期时间:
class Timer
{
public string boss { get; set; }
public List<DateTime> spawnTimes { get; set; }
public TimeSpan Runtime { get; set; }
public BossPriority priority { get; set; }
}
正如您所看到的,我想在我的对象中添加一个DateTime列表。因此,我创建了一个类似于以下列表的列表:
List<Timer> bosses = new List<Timer>();
我希望我能做类似的事情,添加日期时间:
bosses.Add(new Timer { boss = "Tequatl", priority = BossPriority.HardCore, spanTimes = { DateTime.ParseExact("07:00 +0000", "hh:mm zzz", CultureInfo.InvariantCulture) } });
不幸的是,这给了我一个"对象引用未设置为对象实例"的错误。
像这样做也没有任何区别 :(
Timer boss = new Timer();
DateTime t1 = DateTime.ParseExact("07:00 +0000", "hh:mm zzz", CultureInfo.InvariantCulture);
DateTime t2 = DateTime.ParseExact("11:30 +0000", "hh:mm zzz", CultureInfo.InvariantCulture);
boss.spawnTimes.AddRange(new List<DateTime> { t1, t2 });
我是否真的需要在每个 DateTime 上执行 .Add() 操作?
Timer
时没有显式地构造/分配一个List<DateTime>
对象,那么您以后就不必处理null
引用。也就是说,var t = new Timer(); t.SpawnTimes.Add(...);
是可以的。此外,您可以自信地迭代任何Timer
实例,而无需先执行null
检查。最后,它使您的代码更简单,因为您不必在每个实例化Timer
的地方都复制List<DateTime>
构造。 - Chris SinclairspawnTimes = { DateTime.... }
语法会为在构造期间分配的List
上的每个项调用 Add 方法。这不会覆盖SpawnTimes
实例。编辑:仅当你有spawnTimes = new List<DateTime> { DateTime.Parse...}
时才会覆盖。 - Chris Sinclair