Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
In diesem Artikel werden die folgenden Compilerwarnungen behandelt:
@$
anstelle von $@
für eine interpolierte wörtliche Zeichenfolge zu verwenden, verwenden Sie eine neuere Sprachversion.ref
“ übergeben werden. Um ref
-Argumente an in
-Parameter zu übergeben, müssen Sie auf die Sprachversion 12 oder höher aktualisieren.Darüber hinaus beziehen sich die folgenden Fehler und Warnungen auf Strukturinitialisierungsänderungen in aktuellen Versionen:
Die Ursache für all diese Fehler und Warnungen liegt darin, dass der installierte Compiler eine neuere Version von C# unterstützt als die von Ihrem Projekt ausgewählte Version. Der C#-Compiler kann mit jeder früheren Version kompatibel sein. Sie können die Syntax anhand einer früheren Version von C# überprüfen oder weil Ihr Projekt ältere Bibliotheken oder Runtimes unterstützen muss.
Es gibt zwei mögliche Ursachen und drei Möglichkeiten, diese Fehler und Warnungen zu beheben.
Der Compiler bestimmt basierend auf den folgenden Regeln eine Standardversion:
Ziel | Version | C#-Sprachversionsstandard |
---|---|---|
.NET | 9.x | C# 13 |
.NET | 8.x | C# 12 |
.NET | 7.x | C# 11 |
.NET | 6.x | C# 10 |
.NET | 5.x | C# 9.0 |
.NET Core | 3.x | C# 8.0 |
.NET Core | 2.x | C# 7.3 |
.NET-Standard | 2.1 | C# 8.0 |
.NET-Standard | 2.0 | C# 7.3 |
.NET-Standard | 1.x | C# 7.3 |
.NET Framework | alle | C# 7.3 |
Wenn ihr ausgewähltes Framework nicht mit der erforderlichen Sprachversion übereinstimmt, können Sie das Zielframework aktualisieren.
Möglicherweise haben Sie in Ihrer Projektdatei ein älteres Zielframework ausgewählt. Wenn Sie das LangVersion
-Element aus Ihrer Projektdatei entfernen, verwendet der Compiler den Standardwert, der im vorherigen Abschnitt aufgeführt wurde. In der folgenden Tabelle sind alle aktuellen C#-Sprachversionen enthalten. Sie können auch eine bestimmte Sprachversion angeben, um neuere Features zu aktivieren.
Wert | Bedeutung |
---|---|
preview |
Der Compiler akzeptiert jede gültige Sprachsyntax der letzten Vorschauversion. |
latest |
Der Compiler akzeptiert die Syntax der neuesten veröffentlichte Version des Compilers (einschließlich Nebenversionen). |
latestMajor oder default |
Der Compiler akzeptiert die Syntax der neuesten veröffentlichte Hauptversion des Compilers. |
13.0 |
Der Compiler akzeptiert nur Syntax von C# 13 oder niedriger. |
12.0 |
Der Compiler akzeptiert nur Syntax von C# 12 oder niedriger. |
11.0 |
Der Compiler akzeptiert nur Syntax von C# 11 oder niedriger. |
10.0 |
Der Compiler akzeptiert nur Syntax, die in C# 10 oder niedriger enthalten ist. |
9.0 |
Der Compiler akzeptiert nur Syntax, die in C# 9 oder niedriger enthalten ist. |
8.0 |
Der Compiler akzeptiert nur Syntax, die in C# 8.0 oder niedriger enthalten ist. |
7.3 |
Der Compiler akzeptiert nur Syntax, die in C# 7.3 oder früher enthalten ist. |
7.2 |
Der Compiler akzeptiert nur Syntax, die in C# 7.2 oder früher enthalten ist. |
7.1 |
Der Compiler akzeptiert nur Syntax, die in C# 7.1 oder früher enthalten ist. |
7 |
Der Compiler akzeptiert nur Syntax, die in C# 7.0 oder früher enthalten ist. |
6 |
Der Compiler akzeptiert nur Syntax, die in C# 6.0 oder früher enthalten ist. |
5 |
Der Compiler akzeptiert nur Syntax, die in C# 5.0 oder früher enthalten ist. |
4 |
Der Compiler akzeptiert nur Syntax, die in C# 4.0 oder früher enthalten ist. |
3 |
Der Compiler akzeptiert nur Syntax, die in C# 3.0 oder früher enthalten ist. |
ISO-2 oder 2 |
Der Compiler akzeptiert nur Syntax, die in ISO/IEC 23270:2006 C# (2.0) enthalten ist. |
ISO-1 oder 1 |
Der Compiler akzeptiert nur Syntax, die in ISO/IEC 23270:2003 C# (1.0/1.2) enthalten ist. |
Weitere Informationen zu den für die einzelnen Frameworkversionen unterstützten Sprachversionen finden Sie im Artikel zum Konfigurieren der Sprachversion im entsprechenden Abschnitt der Sprachreferenz.
Wenn Sie ältere Bibliotheken oder Runtimes unterstützen müssen, müssen Sie möglicherweise die Verwendung neuerer Funktionen vermeiden.
Die Diagnose für experimentelle Funktionen kann deaktiviert werden, um die experimentelle Funktion zu verwenden.
Warnung
Experimentelle Funktionen unterliegen Änderungen. Die APIs können sich ändern oder in zukünftigen Aktualisierungen entfernt werden. Das Einschließen experimenteller Funktionen ist eine Möglichkeit für Bibliotheksautoren, Feedback zu Ideen und Konzepten für die zukünftige Entwicklung zu erhalten. Seien Sie äußerst vorsichtig, wenn Sie eine als experimentell gekennzeichnete Funktion verwenden.
Sie können auch ihre eigenen experimentellen Features mithilfe der System.Diagnostics.CodeAnalysis.ExperimentalAttribute. Der Compiler gibt CS9211 aus, wenn der für die experimentelle Funktion verwendete Bezeichner kein gültiger Bezeichner ist.
Alle diese Fehler und Warnungen tragen dazu bei, sicherzustellen, dass struct
-Typen ordnungsgemäß initialisiert werden, bevor auf ihre Felder zugegriffen wird. In früheren Versionen von C# müssen Sie alle Felder in einer Struktur in einem beliebigen Konstruktor explizit zuweisen. Der parameterlose Konstruktor initialisiert alle Felder mit ihrem Standardwert. In späteren Versionen initialisieren alle Konstruktoren alle Felder. Entweder wird das Feld explizit festgelegt, in einem Feldinitialisierer festgelegt oder auf den Standardwert festgelegt.
Sie können diesen Fehler beheben, indem Sie Ihre Sprachversion auf C# 11 aktualisieren, jeder struct
-Konstruktor initialisiert alle Felder. Wenn dies keine mögliche Option ist, müssen Sie den Standardkonstruktor explizit aufrufen, wie im folgenden Beispiel gezeigt:
struct S
{
public int AIProp { get; set; }
public S(int i){} //CS0843
// Try the following lines instead.
// public S(int i) : this()
// {
// AIProp = i;
// }
}
class Test
{
static int Main()
{
return 1;
}
}
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrieren