Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Tip
Neu bei der Entwicklung von Software? Beginnen Sie zuerst mit den Lernprogrammen " Erste Schritte ". Durch das Projekt können Sie sich mit Klassen, Methoden und Schleifen vertraut machen.
Haben Sie Erfahrung in einer anderen Sprache? Dieses Lernprogramm konzentriert sich auf C#-Eintragsfeatures, die Sie täglich verwenden: Wertgleichheit, Positionssyntax und with Ausdrücke.
In diesem Lernprogramm erstellen Sie eine Konsolen-App, die tägliche Temperaturen mithilfe von Datensätzen und Aufzeichnungsstrukturen modelliert.
In diesem Tutorial erfahren Sie, wie:
- Deklarieren Sie Positionsdatensätze und Datensatzstrukturen.
- Erstellen Sie eine kleine Datensatzhierarchie.
- Verwenden Sie die vom Compiler generierte Gleichheit und Formatierung.
- Verwenden Sie
withAusdrücke für nicht destruktive Mutationen.
Prerequisites
- Das neueste .NET SDK
- Visual Studio Code Editor
- Das C# DevKit
Installationsanweisungen
Verwenden Sie auf Windows diese WinGet-Konfigurationsdatei, um alle erforderlichen Komponenten zu installieren. Wenn Sie bereits etwas installiert haben, überspringt WinGet diesen Schritt.
- Laden Sie die Datei herunter, und doppelklicken Sie, um sie auszuführen.
- Lesen Sie den Lizenzvertrag, geben Sie yein, und wählen Sie Geben Sie ein, wenn Sie zur Annahme aufgefordert werden.
- Wenn Sie in Ihrer Taskleiste eine blinkende Eingabeaufforderung für die Benutzerkontensteuerung (User Account Control, UAC) erhalten, können Sie die Installation fortsetzen.
Auf anderen Plattformen müssen Sie jede dieser Komponenten separat installieren.
- Laden Sie das empfohlene Installationsprogramm von der .NET SDK-Downloadseite herunter , und doppelklicken Sie, um es auszuführen. Die Downloadseite erkennt Ihre Plattform und empfiehlt das neueste Installationsprogramm für Ihre Plattform.
- Laden Sie das neueste Installationsprogramm von der Startseite Visual Studio Code herunter, und doppelklicken Sie darauf, um es auszuführen. Diese Seite erkennt auch Ihre Plattform, und der Link sollte für Ihr System korrekt sein.
- Klicken Sie auf der Erweiterungsseite C# DevKit auf die Schaltfläche "Installieren". Dadurch wird Visual Studio-Code geöffnet und gefragt, ob Sie die Erweiterung installieren oder aktivieren möchten. Wählen Sie "Installieren" aus.
Erstellen Sie die App und Ihren ersten Datensatz
Erstellen Sie einen Ordner für Ihre App, führen Sie dotnet new console aus und öffnen Sie das generierte Projekt.
Fügen Sie eine Datei mit dem Namen DailyTemperature.cshinzu, und fügen Sie eine Position readonly record struct für Temperaturwerte hinzu:
public readonly record struct DailyTemperature(double HighTemp, double LowTemp)
{
public double Mean => (HighTemp + LowTemp) / 2.0;
}
Fügen Sie eine Datei mit dem Namen Program.cshinzu, und erstellen Sie Beispieltemperaturdaten:
private static DailyTemperature[] data = [
new DailyTemperature(HighTemp: 57, LowTemp: 30),
new DailyTemperature(60, 35),
new DailyTemperature(63, 33),
new DailyTemperature(68, 29),
new DailyTemperature(72, 47),
new DailyTemperature(75, 55),
new DailyTemperature(77, 55),
new DailyTemperature(72, 58),
new DailyTemperature(70, 47),
new DailyTemperature(77, 59),
new DailyTemperature(85, 65),
new DailyTemperature(87, 65),
new DailyTemperature(85, 72),
new DailyTemperature(83, 68),
new DailyTemperature(77, 65),
new DailyTemperature(72, 58),
new DailyTemperature(77, 55),
new DailyTemperature(76, 53),
new DailyTemperature(80, 60),
new DailyTemperature(85, 66)
];
Diese Syntax bietet Ihnen eine präzise Datenmodellierung mit unveränderlicher Wertsemantik.
Hinzufügen von Verhalten zur Datensatzstruktur
In DailyTemperature.cs, die Datensatzstruktur verfügt bereits über eine berechnete Mean-Eigenschaft.
public double Mean => (HighTemp + LowTemp) / 2.0;
Eine Datensatzstruktur funktioniert hier gut, da jeder Wert klein und eigenständig ist.
Erstellen Sie Datensatztypen für Gradtagberechnungen
Note
Heizgradtage und Kühlgradtage messen, wie viel die tägliche Durchschnittstemperatur von einer Basistemperatur abweicht (in der Regel 65°F/18°C). Heizgradtage sammeln sich an kalten Tagen an, wenn der Durchschnitt unter der Basis liegt, während sich die Kühlgradtage an warmen Tagen ansammeln, wenn der Durchschnitt über der Basis liegt. Diese Berechnungen helfen bei der Schätzung des Energieverbrauchs für Heizungs- oder Kühlgebäude, was sie für Versorgungsunternehmen, Gebäudemanager und Klimaanalysen nützlich macht.
Erstellen Sie eine Datei DegreeDays.cs mit einer Hierarchie für Berechnungen des Heiz- und Kühlgradtages:
public abstract record DegreeDays(double BaseTemperature, IEnumerable<DailyTemperature> TempRecords);
public sealed record HeatingDegreeDays(double BaseTemperature, IEnumerable<DailyTemperature> TempRecords)
: DegreeDays(BaseTemperature, TempRecords)
{
public double DegreeDays => TempRecords.Where(s => s.Mean < BaseTemperature).Sum(s => BaseTemperature - s.Mean);
}
public sealed record CoolingDegreeDays(double BaseTemperature, IEnumerable<DailyTemperature> TempRecords)
: DegreeDays(BaseTemperature, TempRecords)
{
public double DegreeDays => TempRecords.Where(s => s.Mean > BaseTemperature).Sum(s => s.Mean - BaseTemperature);
}
Berechnen Sie nun die Summen aus Ihrer Methode Main in Program.cs:
var heatingDegreeDays = new HeatingDegreeDays(65, data);
Console.WriteLine(heatingDegreeDays);
var coolingDegreeDays = new CoolingDegreeDays(65, data);
Console.WriteLine(coolingDegreeDays);
Die generierte ToString Ausgabe ist nützlich für schnelle Diagnosen, während Sie iterieren.
Überschreiben von PrintMembers zur Anpassung der Ausgabe
Wenn die Standardausgabe zu viel Rauschen enthält, überschreiben Sie PrintMembers im Basisdatensatz:
protected virtual bool PrintMembers(StringBuilder stringBuilder)
{
stringBuilder.Append($"BaseTemperature = {BaseTemperature}");
return true;
}
Das Überschreiben sorgt dafür, dass die Ausgabe auf die benötigten Informationen fokussiert bleibt.
Verwendung mit Ausdrücken für nicht destruktive Mutation
Verwenden Sie with, um geänderte Kopien zu erstellen, ohne den ursprünglichen Datensatz zu verändern.
// Growing degree days measure warming to determine plant growing rates
var growingDegreeDays = coolingDegreeDays with { BaseTemperature = 41 };
Console.WriteLine(growingDegreeDays);
Erweitern Sie diese Idee, um gleitende Summen aus Datensegmenten Ihrer Eingabedaten zu berechnen.
// showing moving accumulation of 5 days using range syntax
List<CoolingDegreeDays> movingAccumulation = new();
int rangeSize = (data.Length > 5) ? 5 : data.Length;
for (int start = 0; start < data.Length - rangeSize; start++)
{
var fiveDayTotal = growingDegreeDays with { TempRecords = data[start..(start + rangeSize)] };
movingAccumulation.Add(fiveDayTotal);
}
Console.WriteLine();
Console.WriteLine("Total degree days in the last five days");
foreach(var item in movingAccumulation)
{
Console.WriteLine(item);
}
Dieser Ansatz ist nützlich, wenn Sie Transformationen benötigen, während Sie originale Werte beibehalten.
Nächste Schritte
- Überprüfen Sie C#-Datensatztypen , um tiefere Anleitungen zu erhalten.
- Fahren Sie mit objektorientiertem C# fort, um umfassendere Entwurfsmuster zu erstellen.
- Erkunden Sie das Konvertieren von Typen , um Datensätze mit sicheren Konvertierungsmustern zu kombinieren.