Add List<DateTime> values inside a List<T>
c#, datetime, list
Solution
Your NRE is caused by the fact you're not initializing `Timer.spawnTimes`.
You can save on typing if you initialize the class as part of the default constructor:
public class Timer {
public List<DateTime> SpawnTimes { get; private set; }
...
public Timer() {
this.SpawnTimes = new List<DateTime>();
}
}
Another option is to have an overloaded constructor that accepts `params` arguments:
public class Timer {
public List<DateTime> SpawnTimes { get; private set; }
...
public Timer() {
this.SpawnTimes = new List<DateTime>();
}
public Timer(String boss, /*String runtime,*/ BossPriority priority, params String[] spawnTimes) : this() {
this.Boss = boss;
// this.Runtime = TimeSpan.Parse( runtime );
this.Priority = priority;
foreach(String time in spawnTimes) {
this.SpawnTimes.Add( DateTime.ParseExact( time, "HH:mm" ) );
}
}
}
This is used in practice like so:
bosses.Add( new Timer("Tequat1", BossPriority.HardCore, "07:00 +0000" ) );
bosses.Add( new Timer("Tequat2", BossPriority.Nightmare, "01:00 +0000", "01:30 +0000" ) );
bosses.Add( new Timer("Tequat3", BossPriority.UltraViolence, "12:00 +0000" ) );
Also: FxCop/StyleCop time!
- Types (like classes) should be `PascalCase`
- Public members should also be `PascalCase` (unlike in Java where they're `camelCase`)
- e.g. `public BossPriority priority` should be `public BossPriority Priority`
- Collection members should not be exposed through mutable properties (i.e. use `private set` instead of `set` (implied public)
- Public collection members should be `Collection<T>` or `ReadOnlyCollection<T>` instead of `List<T>` or `T[]`
Problem
This might be kind of Tricky. Basically I've got a class that looks like this: ``` class Timer { public string boss { get; set; } public List<DateTime> spawnTimes { get; set; } public TimeSpan Runtime { get; set; } public BossPriority priority { get; set; } } ``` As you can see, I want to add a list of DateTimes in my object. So I've created a list that looks like this: ``` List<Timer> bosses = new List<Timer>(); ``` I was hoping that I could do something similar to this, to add the DateTimes: ``` bosses.Add(new Timer { boss = "Tequatl", priority = BossPriority.HardCore, spanTimes = { DateTime.ParseExact("07:00 +0000", "hh:mm zzz", CultureInfo.InvariantCulture) } }); ``` Unfortunately, that is giving me a "Object reference not set to an instance of an object." error. Doing it like this, doesn't make a difference either :( ``` 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 }); ``` Do I really have do .Add() on every DateTime?