public class Celebrity
{
public string? Name { get; set; }
public int Age { get; set; }
public override string ToString() => $"{Name}: {Age}";
public void Test()
{
var celebrity = new Celebrity { Name = "Jennifer Aniston", Age = 54 };
ChangeCelebrity(celebrity);
Console.WriteLine(celebrity);
}
static void ChangeCelebrity(Celebrity celebrity)
{
celebrity.Name = "Brad Pitt";
celebrity.Age = 60;
celebrity = new Celebrity { Name = "Angelina Jolie", Age = 48 };
}
}
#csharp #referencetype
public record struct Celebrity2(string Name)
{
public override string ToString() => Name;
public void Test()
{
var celebrity = new Celebrity2("Jennifer Aniston");
ChangeCelebrity(celebrity);
Console.WriteLine(celebrity);
}
static void ChangeCelebrity(Celebrity2 celebrity)
{
celebrity.Name = "Brad Pitt";
celebrity = new Celebrity2("Angelina Jolie");
}
}
#csharp #valuetype
public async Task Test()
{
try
{
await Task.Factory.StartNew<int>(() => throw new Exception())
.ContinueWith(x => 2 * 2)
.ContinueWith(x => Math.Sqrt(x.Result))
.ContinueWith(x => Console.WriteLine(x.Result));
}
catch (AggregateException)
{
Console.WriteLine(nameof(AggregateException));
}
catch (Exception)
{
Console.WriteLine(nameof(Exception));
}
}
#csharp #task #async
abstract class A
{
public abstract string GetName();
}
class B : A
{
public override string GetName() => nameof(B);
}
class C : B
{
public new string GetName() => nameof(C);
}
public void Test()
{
A b = new B();
A c = new C();
Console.WriteLine(b.GetName() + c.GetName());
}
#csharp #inheritance
public void Test()
{
var thread1 = new Thread(Print);
var thread2 = new Thread(Print);
thread1.Start();
thread2.Start();
}
void Print()
{
var strArray = "Hello World";
lock ("lock")
{
for (var i = 0; i < strArray.Length; i++)
{
Console.Write(strArray[i]);
Thread.Sleep(100);
}
Console.Write(" ");
}
}
#csharp #thread #lock
public async Task Test()
{
var threadId1 = Thread.CurrentThread.ManagedThreadId;
var task1 = Task.Delay(500);
await task1;
var threadId2 = Thread.CurrentThread.ManagedThreadId;
var task2 = Task.Delay(500);
Thread.Sleep(1000);
await task2;
var threadId3 = Thread.CurrentThread.ManagedThreadId;
Console.Write($"{threadId1 == threadId2} {threadId2 == threadId3}");
}
#csharp #task #async
public void Test()
{
var list = new List<int> { 1, 2, 3 };
var capacity0 = list.Capacity;
list.Add(4);
var capacity1 = list.Capacity;
list.Add(5);
var capacity2 = list.Capacity;
list.RemoveAt(0);
var capacity3 = list.Capacity;
Console.Write($"{capacity0} {capacity1} {capacity2} {capacity3}");
}
#csharp #list
public void Test()
{
Record r = new Record();
Struct s = new Struct();
RecordStruct rs = new RecordStruct();
Console.Write($"{r.Dozen} {s.Dozen} {rs.Dozen}");
}
record Record(int Dozen = 12);
struct Struct
{
public Struct(int dozen = 12)
{
Dozen = dozen;
}
public int Dozen { get; init; }
}
record struct RecordStruct(int Dozen = 12);
#csharp #struct #valuetype
public void Test()
{
var type = typeof(Celebrity);
var isClonable = type.IsAssignableTo(typeof(ICloneable));
var isEquatable = type.IsAssignableTo(typeof(IEquatable<Celebrity>));
var isSerializable = type.IsAssignableTo(typeof(ISerializable));
Console.Write($"{isClonable} {isEquatable} {isSerializable}");
}
record Celebrity(string Name, int Age);
#csharp #record
public void Test()
{
try
{
var cToken = new CancellationToken(canceled: true);
Task.Run(() => Delay(cToken)).Wait();
Console.Write("Completed");
}
catch (OperationCanceledException)
{
Console.Write("OperationCanceledException");
}
catch (AggregateException)
{
Console.Write("AggregateException");
}
catch (Exception)
{
Console.Write("Exception");
}
}
private Task Delay(CancellationToken cToken)
{
cToken.ThrowIfCancellationRequested();
return Task.Delay(1000);
}
#csharp #task #exception
public void Test()
{
try
{
var serviceProvider = new ServiceCollection()
.AddScoped<INameProvider, NameProvider>()
.AddSingleton<INameProvider, NameProvider2>()
.BuildServiceProvider();
var nameProvider = serviceProvider
.CreateScope()
.ServiceProvider
.GetService<INameProvider>();
Console.Write(nameProvider?.GetName() ?? "Null");
}
catch (Exception)
{
Console.Write("Exception");
}
}
interface INameProvider
{
string GetName();
}
class NameProvider : INameProvider
{
public string GetName() => "Name";
}
class NameProvider2 : INameProvider
{
public string GetName() => "Name2";
}
#csharp #serviceprovider #injection
public void Test()
{
var strEqual = (object)"14.01.2024" == (object)"14.01.2024";
var dtEquals = (object)DateTime.Today == (object)DateTime.Today;
var intEquals = (object)14012024 == (object)14012024;
Console.Write($"{strEqual} {dtEquals} {intEquals}");
}
#csharp #string #valuetype
public class Increment
{
private int _counter;
public void Test()
{
Write(_counter++);
Console.Write(_counter);
}
private void Write(int i)
{
Console.Write(i);
Console.Write(_counter);
}
}
#csharp #increment
✍1