タグ

C#に関するsatoshieのブックマーク (104)

  • えっ、まだList<T>使ってるの? [C#, コレクション] - Qiita

    C#のコレクションの話です. どうも特に理由なくList<T>を漠然と使うようなコードをまま見るので,コレクション型の使い分けについて書いていきます. TL;DR コレクション型には様々な種類があり,それそれに違った利点があるので,何でもList<T>を使うのではなく場面に合ったものを使おうね! List<T>が適している場合 List<T>の一番の強みは,配列のようにインデックスでアクセスできることです.ご存知の通り,list[2]のような書き方でn番目の要素を取り出すことができます.この順番は勝手に変わったりしないので,順番に意味がある場合にも使えます. var numList = new List<string>(){ "ぜろ", "いち", "に" }; var item = numList[2]; // "に" また,要素の中からランダムに1つ選ぶような処理でもよく使われます.0

    えっ、まだList<T>使ってるの? [C#, コレクション] - Qiita
  • 【C#】C# の async/await は実際にどうやって動いているか。 - ねののお庭。

    はじめに 登壇版 Taskの質 C# のイテレータ async/await Compiler Transform ExecutionContext builder.Start() の重要性 IAsyncStateMachine.MoveNext おわりに はじめに C#er は呼吸するように使っている async/await。 そんな async/await について、先日 Stephen Toub 氏 (.NET の中の人。中心人物の一人。) が How Async/Await Really Works in C# という非常に面白い記事を投稿していました。 この記事では Stephen 氏の記事をベースに、C# において async/await は実際どうやって動いてるの?というお話をしていきます。 以前に C#での非同期メソッドの分析。 という翻訳記事を書いたのですが、元になった記

    【C#】C# の async/await は実際にどうやって動いているか。 - ねののお庭。
  • 【C#】async/awaitのキャンセル処理まとめ - Qiita

    はじめに C#におけるasync/awaitを使う上で、絶対に意識しないといけないものは「キャンセル処理」です。 正しく処理をキャンセルしないとメモリリークを起こしたり、デッドロックやデータ不整合を引き起こす可能性があります。 今回はこの「async/awaitにおけるキャンセル処理」について話します。 対象 C#におけるasync/await全般 Task/ValueTask/UniTaskすべてに共通します Unity含む C#のasyc/awaitについてイマイチ自信が持ててない人 先に「結論」 asyncメソッドはCancellationTokenを引数に取るべき await対象が引数にCancellationTokenを要求する場合は省略せずに渡すべき OperationCanceledExceptionの取り扱いを意識するべき 解説 そもそも「キャンセル」とは何を指すのか そも

    【C#】async/awaitのキャンセル処理まとめ - Qiita
  • C#のORM(オブジェクト関係マッピング)における理想形を考えてみる - Qiita

    はじめに C#のORマッパーといえばEntity Framework(以下、EF)が有名で、データベースの接続を調べると真っ先にEFの名前が出てきます。ORMの機能を充分に備えたライブラリはEFしかありませんが、致命的な欠点があります。欠点については後述しますが、これを解決するには他のライブラリを使うほかありません。記事では、EFを使わずにORマッパーの機能を使うライブラリとその組み合わせを紹介します。 ORMの基的な機能 紹介する前にまずはORMで必要な機能を確認します。ORM(Object-relational mapping)は、オブジェクト関係マッピングと呼ばれ、オブジェクト思考とRDB間の非互換であるデータの違いをうまく吸収(これの逆をインピーダンスミスマッチと言います)して、簡単にデータを扱えるようにする技法です。基的な機能は以下があります。 SQLを意識することなくコー

    C#のORM(オブジェクト関係マッピング)における理想形を考えてみる - Qiita
  • C#でSQLite3を使ってみる - Qiita

    C#でSQLite3を使ってみたのでまとめ。DBが1つのファイルで完結するって何かと便利ですよね。 このへんの記事が参考になりました。 SQLite で LINQ を使う : http://www.moonmile.net/blog/archives/7979 C# で SQLite を便利に使うサンプルコード(LINQ to SQLite): http://shinta0806be.ldblog.jp/archives/9084539.html 1.どのパッケージを使う? ここが問題。NuGetで「SQLite」で検索すると、 まずどれを使っていいかわかりません。大抵「System.Data.SQLite」をインストールするのですが、これはEntity Frameworkや、SQLiteのLINQ拡張(これを入れなくてもLINQ to SQLが使える謎)など全部入った欲張りセットで、気づ

    C#でSQLite3を使ってみる - Qiita
  • .NET 5 を使いたい理由6選(C#編) - Qiita

    C#9.0の進歩が目覚ましいので使いたい .NET5 がリリースされました。C#も9.0となりました。C#9.0は.NET5以降でしか使えません。 .NET5 を使えるプロジェクトではどんどん新しい文法を活用しましょう。 C#9.0の新機能から、素晴らしいと思った部分をまとめてみました。 使いたい理由1 : record class, struct に加えて record を用いて型定義することができます。 変更不可能な参照型とのことです。 public record Person // classのかわりにrecord { public string Name { get; } public DateTime BirthDate { get; } public Person(string name, DateTime birthDate) { Name = name; BirthDate

    .NET 5 を使いたい理由6選(C#編) - Qiita
  • ファイルを削除する際にごみ箱に入れる [C#]

    C#でファイルを削除する際にごみ箱に移す方法について紹介します。 C#にはファイルをごみ箱に移す操作を行うクラス、メソッドが用意されていません。 ですのでVisual Basicのアセンブリを使ってごみ箱に移す処理を行います。 Visual Basicのアセンブリを参照する C#で全角と半角、ひらがなとカタカナの変換を行うために、Visual Basicのアセンブリを参照します。 ソリューション エクスプローラーでアセンブリを追加するプロジェクトのツリーノードを展開します。 展開すると表示されるツリーノードの「参照」を右クリックします。 コンテキストメニューが表示されるので「参照の追加」をクリックします。 「参照マネージャー」ダイアログが表示されますので、左ペインの「アセンブリ」を選択(クリック)し、表示されるアセンブリの一覧から「Microsoft.VisualBasic」を選択(クリッ

    ファイルを削除する際にごみ箱に入れる [C#]
  • 【.NET C#】画像を比較して類似度を計算する方法(サンプルコード有)

    その中でも、「相手のポケモンのアイコンを取得して、そのポケモン名を返す」という処理の実装に丸1日使ってしまったので、備忘録も含めて書き残して置こうと思います。 目的 今回作成するプログラムはこんな感じ。 2つの画像ファイルを比較して、その画像がどれぐらい類似しているのかを計算する上記処理について、処理時間10ms以内 作ろうとしているツールがリアルタイム画像解析を必要とするので、処理に時間がかかるとどうしてもリアルタイムにできない部分があります。 ので、高速で処理できて、かつ類似画像の検出率を99%以上を目指します。 アルゴリズム 今回はPerceptual Hashを利用した類似度の計算を行います。 Perceptual Hashにも何種類かあるようなのですが、dHashと言う隣接するピクセルの輝度値?の差分を比較することによるハッシュ計算方法を使います。 詳細はこちらのサイトが参考にな

    【.NET C#】画像を比較して類似度を計算する方法(サンプルコード有)
  • C#のインクリメント演算子(++)がスレッドセーフじゃないから色々調べた話。 - Qiita

    17年プログラマをやっていて、いまさら i++ がスレッドセーフじゃないことを知った 1 ことを反省しての記事です。 ざっくりいうと C#のインクリメント演算子はスレッドセーフではありません。 スレッドセーフを求める場合は、System.Threading.Interlocked.Incrementを利用しましょう。 System.Threading.Interlocked.Incrementがスレッドセーフたる理由を調べてみた。 文 検証してみる 以下のMSTestを実行してみたところ、テストはエラーになりました。 [TestMethod] public void TestIncrementersThreadSafe() { var tasks = new List<Task>(); int counter = 0; for (int i = 0; i < 250; i++) { ta

    C#のインクリメント演算子(++)がスレッドセーフじゃないから色々調べた話。 - Qiita
  • Microsoftが「ML.NET 1.5.2」を公開、.NET開発者向け機械学習フレームワーク

    Microsoftが「ML.NET 1.5.2」を公開、.NET開発者向け機械学習フレームワーク:ONNXエクスポートなどの機能も強化 Microsoftは、.NET開発者向けのオープンソース機械学習(ML)フレームワークの最新版「ML.NET 1.5.2」を公開した。Model Builderツールで「Azure ML」を使ってオブジェクト検出モデルをトレーニングできるようになった他、ML.NET CLIで画像分類モデルをローカルでトレーニングすることも可能になった。 Microsoftは2020年9月25日(米国時間)、オープンソースの.NET開発者向けクロスプラットフォーム機械学習(ML)フレームワークの最新版「ML.NET 1.5.2」を公開した。 ML.NETでは、.NETエコシステムから離れることなく、MLやデータサイエンスの経験が乏しい開発者でも、.NETアプリケーションにM

    Microsoftが「ML.NET 1.5.2」を公開、.NET開発者向け機械学習フレームワーク
  • 第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ―

    第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ―:連載.NETマルチスレッド・プログラミング入門(1/3 ページ) 連載目次 前回では、.NETにおけるマルチスレッド・プログラミングの基的な実装方法についてまとめた。今回および次回では、マルチスレッドを使いこなすうえで欠かせない、スレッドをコントロールするためのプログラミング手法について解説していこう。 排他制御と同期制御とは シングルスレッド・プログラムでは問題にはならないが、マルチスレッド・プログラムで注意をしなくてはならないのが、「排他制御」と「同期制御」である。これらはまとめて同期制御と呼ばれることも多いが、ここでは分かりやすく説明するために、2つに分けて考えることにしたい。 排他制御とは、複数のスレッドから共通のリソース(データ)にほぼ同時にアク

    第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ―
  • マルチスレッドで高速なC#を書くためのロック戦略 - Qiita

    unsafeはロックを取得していないのでプログラマーの意図した動きにはなりませんが、ロックによるオーバーヘッドを見るために計測しました。 Interlocked > lock > SemaphoreSlim > Semaphore > Mutex の順に早いようです。 lock > SemaphoreSlim > Interlocked > Mutex > Semaphore の順に早いようです。 とはいえロック方法によっては得手不得手があるので、使う状況をそれぞれ見ていきます。 lock

    マルチスレッドで高速なC#を書くためのロック戦略 - Qiita
  • 自動実装プロパティ初期化子 - xin9le.net

    「Try! C# vNext」ということで、次期C#の新機能を少しずつ試していきたいと思います。まず最初は自動実装プロパティ初期化子 (= Auto-property initializers) です。これまではメンバー変数の初期化はクラス宣言と同時にできたのですが、自動実装プロパティはコンストラクタなどでしか初期化ができませんでした。その制約を取り払い、より簡潔な記述を可能にしようというものです。 とりあえず使ってみる 使い方は簡単で、以下のように自動実装プロパティに対して値を代入するように記述するだけです。 class Book { public string Title{ get; set; } = "Untitled"; public int Price{ get; set; } = 100; } これは以下の書き方と等価です。定型的な初期化するだけのコンストラクタがほぼほぼ不要に

    自動実装プロパティ初期化子 - xin9le.net
  • Using lock statement within a loop in C#

  • Mono Project

    Mono is a software platform designed to allow developers to easily create cross platform applications. Sponsored by Microsoft, Mono is an open source implementation of Microsoft's .NET Framework as part of the .NET Foundation and based on the ECMA standards for C# and the Common Language Runtime. A growing family of solutions and an active and enthusiastic contributing community is helping positio

  • C# で出来ること一覧 - Qiita

    更新履歴 2020/03/23 IoT について追記 その他に帝国兵さんのツイートを追加 サーバーレスカテゴリーを追加して AWS Lambda を追加 ASP.NET Core Razor Pages を追記 2020/03/24 kennakamu さんの「個人的に C# が向かないと思うこと」へのリンク追加 文 昔ブログにこんな記事を書きました。 C# で何か出来るのか?まとめてみた あれから 2 年が経って昔からある Windows 専用の .NET Framework に対する新機能の提供が終わり、クロスプラットフォームに対応した .NET Core が今後のメインストリームとして .NET 5 → .NET 6 のように進化していくことが 2019 年 5 月の Build 2019 で発表されました。以下の Blog 記事がアナウンス後に発表されています。 Introduc

    C# で出来ること一覧 - Qiita
  • C# の is 演算子と typeof の型判定の挙動の違い - PG日誌

    コード書けばすぐわかる事なんですが is 演算子の挙動の話です。 is 演算子は複数の型で true になる可能性があります。 親子関係がある型で厳密に型を判定したい場合、GetType() と typeof を使います。 // こんなクラスがあったとして、、 public class BaseClass { } public class DerivedClass_1 : BaseClass { } public class DerivedClass_2 : BaseClass { } // こんなコードを書いたとすると結果がコメントのようになります static void Main(string[] args) { BaseClass test = new DerivedClass_1(); // is演算子による型判定 Console.WriteLine("test is BaseCl

    C# の is 演算子と typeof の型判定の挙動の違い - PG日誌
  • 私がC#の勉強のために必ずクローンしているGitHubリポジトリを紹介します - Alternative Architecture DOJO

    こんにちは。MLBお兄さんこと松村です。 今回は私がPCに必ずgit cloneしているC#系のGitHubリポジトリを紹介します。 どういったリポジトリであるか、リポジトリをクローンしている目的も併せて書いてみます。 とりあえず詳細はいいから、どんなリポジトリがあるか知りたい方はこちらをご覧ください。 gist.github.com それでは列挙していきます。(アルファベット順です) 常にクローンするもの dotnet-presentations/aspnetcore-app-workshop github.com ASP.NET Core 2.2でSPAのWebアプリケーションを作るワークショップです。 dotnet-presentations/aspnetcore-concepts-workshop github.com 前述の dotnet-presentations/aspnet

    私がC#の勉強のために必ずクローンしているGitHubリポジトリを紹介します - Alternative Architecture DOJO
  • HttpClientをusingで囲わないでください - Qiita

    using (var client = new HttpClient()) { var response = await client.GetAsync(url); .... } これは間違いです。HttpClientオブジェクトは dispose してはいけません! Stackoverflowにも沢山この間違いがあります。 (追記: 正確に言うとdisposeしてはいけないわけではなく、生成と破壊を繰り返すのが誤りです) 正しい使い方はAPIの公式ドキュメントに書いてある通りです。 public class GoodController : ApiController { private static readonly HttpClient HttpClient; static GoodController() { HttpClient = new HttpClient(); } } 上

    HttpClientをusingで囲わないでください - Qiita
  • 文字列からファイル名に使えない文字を(取り除く|置き換える)

    LINQの小ネタをひとつ。 ファイルを作るときのファイル名に、何らかの理由でファイル名として使えない文字が含まれていないかをチェックして、含まれているときには取り除いたり、置き換えたりして処理を続行する。というケースがままあります。 この手の細かい処理が結構見落としがちで、面倒だったりします。 これをLINQを使ってお気楽実装してみます。まぁ、見落としを防ぐことはできませんけどね。 結局のところ、入力された文字列を一文字ずつ見ていって、ファイル名として使えない文字なら取り除いたり、置き換えたりする処理を実装します。「一文字ずつ」見ていくので、LINQの出番ですね。 置き換える(ここではアンダースコア'_')なら、こうですかね。 var invalidChars = Path.GetInvalidFileNameChars(); var converted = string.Concat(

    satoshie
    satoshie 2019/04/05