[.NET6][C#] Sqlite3を使ってみる。
だいぶ前に試してみて記事も上げたような気がするんだけど、見当たらなかったのと.NET6でも試してみようと思って使ってみた。
- Visual Studio 2022を使って新規プロジェクトでC#コンソールアプリを作成する。
- NuGetを使ってMicrosoft.Data.Sqlite.CoreとSQLitePCLRaw.bundle_e_sqlite3をインストールする。
-->
だいぶ前に試してみて記事も上げたような気がするんだけど、見当たらなかったのと.NET6でも試してみようと思って使ってみた。
手っ取り早い方法はTaskクラスを使う。
public Task<int> TestAsync()
{
return Task.Run<int>(async () =>
{
// ↓このループは時間のかかる処理のつもり
for (int i = 0; i < 10; i++)
{
Debug.WriteLine(i);
await Task.Delay(1000);
}
return 123;
});
}
private async void button_Click(object sender, RoutedEventArgs e)
{
int ret = await TestAsync();
await new MessageDialog(ret.ToString()).ShowAsync();
}
詳しくは、
連載:C# 5.0&VB 11.0新機能「async/await非同期メソッド」入門(最終回):第3回 非同期メソッドの内部実装とAwaitableパターンの独自実装 (2/2) - @ITに書かれている。
実際のところは、時間のかかる処理は別スレッドで動かすと思うんでTask.Runを使う方法でいいと思う。
クラスの継承とかせずに見かけ上メソッドを追加する機能だ。見かけ上ってのは使う側のコードがインスタンスメソッドを呼ぶときと同じように書けるとういこと。拡張メソッド中ではプライベートなメンバが使えない。
stringにHoge()と言うメソッドを追加してみよう。(なんかいい感じの追加したいメソッドが思い浮かばなかった(^^;))
拡張メソッドの最初の引数に拡張したいクラスと引数名、その頭にthisを付けておく。
public static class ExtensionString
{
public static String Hoge(this String str)
{
return "###" + str;
}
}
使う側は普通にインスタンスメソッドを呼ぶのと同じようにする。
string str = "あいうえお";
Debug.WriteLine(str.Hoge());
この拡張メソッドが有効な範囲は同じネームスーペスで違う場合は、usingで指定しておくと使えるようになる。
LINQの拡張メソッド一覧と、ほぼ全部のサンプルを作ってみました。 - 地平線に行く
ありがたや〜w
わかりやすく、まとまってます。Microsoftのヘルプだとほしいメソッドが探しにくかったんだよな。
[C#] Linqと再帰でファイルの一覧表示(2)のLinqのクエリ式をメソッド構文で書き直してみた。
Func<DirectoryInfo, IEnumerable<string>> FileListUp = null; // (1)こうしておかないとエラーになる
FileListUp = dirInfo =>
{
return dirInfo.GetDirectories().Select(d => FileListUp(d))
.SelectMany(f => f) // (2)ここ、なんか他の書き方ないのかな?
.Concat(dirInfo.GetFiles().Select(f => f.FullName));
};
var di = new DirectoryInfo(".");
var list = FileListUp(di);
// 表示する
list.ToList().ForEach(s => Console.WriteLine(s));
(2)の部分のなんか微妙なんだけど、他の書き方ないのかな?