μ λ€λ¦λ λ³μΉμ΄ λ©λλ€.
ν λ‘ μλ μΈκΈλμλλ°,
using IEn<T> = System.Collections.Generic.IEnumerable<T>;
IEn<int> arr = new int[4];
μ΄λ°λλμΌλ‘ μ λ€λ¦ν΄λμ€μ μ΄λ¦λ§ λ°κΎΈλ©΄μ μ λ€λ¦νλΌλ―Έν°λ₯Ό μ΄μ©νκ³ μΆμ΄μ
μ μ΄λ° ννλ₯Ό λ§μνμλ κ΅°μ.
using L<TValue> = System.Collections.Generic.List<TValue>;
μ΄λ° ννλ (μμ§) μ§μνμ§ μμ΅λλ€.
λ°μλ μμ±(Semi Auto Properties)μ΄ C# 12μ ν¬ν¨λμ§ μλ κ² κ°λ€μ. κ½€ κΈ°λ€λ¦¬λ κΈ°λ₯ μ΄μλλ° μμ½μ΅λλ€.
μ μ±νλμ C# 12 κ΄λ ¨ κΈ:
- λ·λ·: 2144. C# 12 - 컬λ μ μ(Collection Expressions) (sysnet.pe.kr)
- λ·λ·: 2142. C# 12 - μΈλΌμΈ λ°°μ΄(Inline Arrays) (sysnet.pe.kr)
- λ·λ·: 2141. C# 12 - Interceptor (μ»΄νμΌ μμ λ©μλ νΈμΆ μ¬μμ±) (sysnet.pe.kr)
- .NET Framework: 2114. C# 12 - λͺ¨λ νμμ λ³μΉ(Using aliases for any type) (sysnet.pe.kr)
- .NET Framework: 2113. C# 12 - κΈ°λ³Έ μμ±μ(Primary Constructors) (sysnet.pe.kr)
- .NET Framework: 2112. C# 12 - κΈ°λ³Έ λλ€ λ§€κ° λ³μ (sysnet.pe.kr)
Experimental Attribute
μ μ΄κ² .NET 8μ΄ μλλΌ C# 12μ κΈ°λ₯ μ΄μκ΅°μ. Experimental νΉμ±μ μ¬μ©νμ¬ κ΅¬ννλ©΄ μ¬μ© μ μ€νμ κΈ°λ₯μ΄λΌλ μ»΄νμΌ μ€λ₯μ ν¨κ» μ£Όμ ν΄μ μ¬μ©ν κ²μ μλ €μ€λλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ μ¬μ©νκΈ°λ₯Ό μνλ€λ©΄ #pragma warning disable MING01
λ±μ μ΄μ©ν΄μ κ΄λ ¨ μ€λ₯λ₯Ό 무μν μ μμ΅λλ€.
κ°μΈμ μΌλ‘ .net 8μμ κ°μ₯ μ°κ³ μΆμλ κΈ°λ₯μ΄ using type μ λλ€.
using Tuple = (int a, int b);
namespace ConsoleApp11;
internal class Program
{
static void Main(string[] args)
{
Tuple tuple = new(1, 2);
Console.WriteLine(tuple.a + "/" + tuple.b);
}
}
μ΄κ² .net 7μμλ μλμ§λ§ 8μ λμ λμμ΅λλ€.
C++ λ typedef λ₯Ό μ°λκ² μκ° λλ€μ.
컬λ μ ννμμ μ¬μ©ν λ λ€μ μ²λΌ,
Span<int> list = [1, 2, 3, 4, 5];
SpanμΌλ‘ 컬λ μ
μ μμ±ν κ²½μ° μ λ§λ‘ μ€νμ ν λΉνλμ§ κΆκΈν΄μ BenchmarkDotNet
μ μ΄μ©ν΄ λ€μ μ²λΌ ꡬμ±ν ν νμΈν΄ 보μμ΅λλ€.
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
namespace Benchmark;
[SimpleJob(RuntimeMoniker.Net80)]
[RPlotExporter]
[MemoryDiagnoser]
public class CSharp12
{
[Params(10000)]
public int Count;
[Benchmark]
public void CollectionExpressionsArray()
{
for (var i = 0; i < Count; i++)
{
int[] list = [1, 2, 3, 4, 5];
list[0] = 1;
}
}
[Benchmark]
public void CollectionExpressionsSpan()
{
for (var i = 0; i < Count; i++)
{
Span<int> list = [1, 2, 3, 4, 5];
list[0] = 1;
}
}
}
| Method | Count | Mean | Error | StdDev | Gen0 | Allocated |
|--------------------------- |------ |----------:|----------:|----------:|--------:|----------:|
| CollectionExpressionsArray | 10000 | 29.108 us | 0.5588 us | 0.5979 us | 38.2385 | 480000 B |
| CollectionExpressionsSpan | 10000 | 8.099 us | 0.0180 us | 0.0160 us | - | - |
μ€, μ λ§λ‘ μ€νμ ν λΉλλκ΅°μ.
λ€μμ κ²½λ‘λ₯Ό ν΅ν΄ C# 12μμ μΆκ°λ κΈ°λ₯μ μ½λλ‘ μ΄ν΄λ³Ό μ μμ΅λλ€.