-
C# 12 features: ExperimentalAttribute
Part 7 in a series on new language features in C# 12.
Experimental attribute
Mark a type, method, or assembly with the
ExperimentalAttribute
and the compiler will generate a warning. You will need to explicitly suppress this warning to consume the experimental code.[Experimental("DAVID01")] public class ExperimentalClass { public void Thing() { // } }
In some ways, this feels to me like the opposite of the
ObsoleteAttribute
.Further reading
Example source
https://github.com/flcdrg/csharp-12/blob/main/07-experimental/ExperimentalClass.cs
-
C# 12 features: Inline arrays
Part 6 in a series on new language features in C# 12.
Inline arrays
Super-niche, but I guess if you need it, you'll appreciate it. Previously you'd probably need to resort to using
unsafe
code to deal with this.[System.Runtime.CompilerServices.InlineArray(10)] public struct InlineArray { public int Thing; }
The compiler now knows this is an array of 10 contiguous elements.
Further reading
Example source
https://github.com/flcdrg/csharp-12/blob/main/06-inline-arrays/InlineArrays.cs
-
C# 12 features: Using aliases
Part 5 in a series on new language features in C# 12.
Alias any type
Now you can create aliases for any type - it doesn't need to have a name.
Tuple
s are a great example, but also arrays.using P = Tuple<string, string, int>; using C = char[];
Further reading
Example source
https://github.com/flcdrg/csharp-12/blob/main/05-alias/Aliases.cs