C# dotnet 6.0 変数の型でswitchしたい場合

C# dotnet 6.0 変数の型でswitchしたい場合

C# dotnet 6.0 変数の型(type)で switchしたい場合のコード例です。

下記 2つの クラスをswitchで判断したい とします。

class A {}
class B {}

List<object>に 上記2つのA, Bクラス インスタンスを入れます。

var objList = new List<object> {
    new A(), new B()
};

1つのswitchで、型が2つ型変数の入ったリスト内の型を判断する

foreach(var obj in objList)
{
    switch (obj){
        case A aValue:
            Console.WriteLine("This type is {0}.",aValue.GetType().ToString());
            break;
        case B bValue:
            Console.WriteLine("This type is {0}.",bValue.GetType().ToString());
            break;
    }
}
C# それぞれの型でswitchできています
結果 型でswitchできています

上記の場合、 変数が switch(値)ですが switch(type) の コード例です。

var objList = new List<Type> {
    (new A()).GetType(), (new B()).GetType()
};
foreach(var obj in objList)
{
    switch (obj){
        case Type aValue when aValue == typeof(A):
            Console.WriteLine("This type is {0}.",aValue.ToString());
            break;
        case Type bValue when bValue == typeof(B):
            Console.WriteLine("This type is {0}.",bValue.ToString());
            break;
    }
}

C# dotnet 6.0 Dictionary コピーを作る

C# dotnet Dictionary copy

Microsoft C# .NET6.0で、 Dictionary 変数のコピーを作る方法。

イコールで コピーした場合、 実態は コピーされません。

newで Dictionary 変数のコピーを作る

using System;
using System.Collections.Generic;

var dir1 = new Dictionary<string, string> { { "key1", "マクド"} };
var dir2 = new Dictionary<string, string>(dir1); //new でコピーする
dir1["key1"] = "マック";//最初に作ったDictionaryのValueを変更する

Console.WriteLine(dir1["key1"]);
Console.WriteLine(dir2["key1"]); //dir1とdir2の中身の違いを確認

Enumerable.ToDictionaryを使った Dictionaryのコピー

using System;
using System.Collections.Generic;

var dir1 = new Dictionary<string, string> { { "key1", "マクド"} };
var dir2 = dir1.ToDictionary(a => a.Key, a => a.Value); 
dir1["key1"] = "マック";//最初に作ったDictionaryのValueを変更する

ToDictionary は 万能です

ToDictionaryList<string>を Dictionary<string, string>にも変換できます。

var array1 = new List<string>{"1,東京","2,大阪"};
var newDic = array1.ToDictionary(a => a.Split(",")[0], a => a.Split(",")[1]);

C# dotnet 6.0 List リストの連結

c# dotnet list AddRange

Microsoft dotnet 6.0 で、 2つの List<T>を 連結させる場合のコード例です。

using System;
using System.Collections.Generic;
var list1 = new List<string>{"難波","日本橋","鶴橋"};
var list2 = new List<string>{"今里","布施","永和"};
list1.AddRange(list2);
foreach(var s in list1){
    Console.WriteLine(s);
}

上記コードは、List<T>内に AddRange()の 引数に 連結させたいcollection を渡しています。

変数 list1に list2が連結してることが確認できます。

AddRange()の引数は、 IEnumerable<T>なので、 string[] 配列を渡すこともできます。

using System;
using System.Collections.Generic;
var list1 = new List<string>{"難波","日本橋","鶴橋"};
var array2 = new string[] {"今里","布施","永和"}; //string配列
list1.AddRange(array2);
foreach(var s in list1){
    Console.WriteLine(s);
}

Enumerable.Concat()を使ったList連結

using System;
using System.Collections.Generic;
var list1 = new List<string>{"難波","日本橋","鶴橋"};
var newList = list1.Concat(new string[]{"今里","布施","永和"}).ToList();
foreach(var s in newList){
    Console.WriteLine(s);
}