Programming Random van array of DateTime values

Yusifer

Well-known member
Crowdfunder FE
Beginner programmeur hier en precies de enige onnozelaar dat het volgende probleem heeft.

Ik heb een array van DateTime voor 4 verschillende deadlines.

C#:
        DateTime[] deadlines = new DateTime[]
        {
            new DateTime(2020, 5, 30), // Expired deadline (31/05/2020)
            new DateTime(2021, 5, 30),
            new DateTime(2022, 5, 30),
            new DateTime(2023, 5, 30)
        };

Deze gebruik ik dan in volgende code in een methode.

C#:
            Random rand = new Random();
            var randomDeadline = new DateTime(rand.Next(deadlines.Length));

            if (randomDeadline < DateTime.Now)
            {
                 // deadline is nog niet verstreken
                Console.WriteLine(randomDeadline.ToString("dd/MM/yyyy"));
            }
            else
            {
                // deadline is verstreken
                Console.WriteLine(randomDeadline.ToString("dd/MM/yyyy"));
            }

Probleem is nu, deze randomDeadline verschijnt altijd als 01/01/0001, waardoor de if dus altijd zal denken dat de deadline nog niet verstreken is.

Kan iemand deze dommerik uitleggen hoe ik dit kan oplossen. :)
 
Ik ben geen C# expert, maar op het moment dat je de new DataTime doet, maak je daar nu geen nieuwe DateTime aan met als argument een random getal tussen 0 en 4 (= deadlines.length)?

Wil je niet doen:
C#:
var randomGetal = rand.Next(deadlines.length)) (al zou je moeten controleren of hier wel een int uit rolt, en of die int niet per ongeluk 4 kan zijn)
var randomDeadline = deadlines[randomGetal] (of deadlines.get(randomgetal) of wat het in C# ook moge zijn)
Eventueel te verkorten naar het volgende, wat meteen je fout beter weergeeft:
Code:
var randomDeadline = deadlines[rand.Next(deadlines.length))]
 
Code zag er eerst zo uit:

Code:
var randomDeadline = rand.Next(deadlines.Length);

Maar dan kreeg ik een probleem in de if-statement: "Operator '<' cannot be applied to operands of type 'int' and 'DateTime'." En de int hier is blijkbaar de rand.Next. Een Convert.ToDateTime zal beweren dat er een "Invalid cast from 'Int32' to 'DateTime'.

Die new Datetime was dus de enige manier dat ik wist om het spel al draaiend te krijgen.


Uw suggestie (laatste code) heeft gewerkt. Zo simpel was het dus. En ik zit daar een hele namiddag op vast. Ik ga het nog ver schoppen zu. :p
 
Terug
Bovenaan