I'm trying to get lowest and highest values in key of a dictionary below
public static Dictionary<SimulationResult, List<Student>> SimulationOutput { get; set; } = new Dictionary<SimulationResult, List<Student>>();
this is the class in the key
internal class SimulationResult
{
public int Unsolved { get; set; }
public int ValuePreferences { get; set; }
public int Index { get; set; }
}
I'm getting the error in the Sequence contains no elements on the lines below
int bestResult = SimulationOutput.Keys.Where(x=> x != null).Select(x => x.ValuePreferences).Max();
also on these lines
int bestResult = SimulationOutput.Keys.Select(x => x.ValuePreferences).Max();
int LowestUnsonved = SimulationOutput.Keys.Select(x => x.Unsolved).Min();
The dictionary is filled in a Parallel for loop.
Parallel.For(1, verwerken.Gegevens.AantalIteraties 1, i =>
{
PracticumCollectie practicumCollectie = verwerken.Data.PracticumCollectie.Copy();
StudentCollectie studentCollectie = verwerken.Data.StudentCollectie.Copy();
studentCollectie.OrderStudentByPreference();
studentCollectie.AssiningStudentToPracticum(practicumCollectie);
practicumCollectie.Oplossing.Index = i;
practicumCollectie.ZetAantalOnopgeloste(studentCollectie);
practicumCollectie.ZetWaardeVoorkeuren(studentCollectie);
bool schrijfOplossing = verwerken.Keuze.IsSimuleren ? verwerken.VoldoetAanOndergrenzen(practicumCollectie.Oplossing) : true;
if (schrijfOplossing)
{
SimulationOutput.Add(verwerken.GetBestandsnaam(practicumCollectie.Oplossing), new List<Student>(studentCollectie.Items));
}
});
CodePudding user response:
you have to use ConcurrentDictionary if you are working with Parallel.
normal dictionaries aren't threadsafe.