タグ

C#とqiitaに関するsatoshieのブックマーク (16)

  • えっ、まだ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#】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#のインクリメント演算子(++)がスレッドセーフじゃないから色々調べた話。 - 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
  • マルチスレッドで高速なC#を書くためのロック戦略 - Qiita

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

    マルチスレッドで高速なC#を書くためのロック戦略 - Qiita
  • 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
  • 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
  • C#リフレクションTIPS 55連発 - Qiita

    タイトルの通り、C#のリフレクションのTIPS集です。 これから示すコードは、以下のusingディレクティブが前提のコードとなってます。 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; 普段はvarキーワードをよく使ってますが、ここでは変数の型がわかるようにvarキーワードの利用はできるだけ控えています。 それと、いくつかのコードはdynamic使ったほうが簡単に書ける場合もありますが、あくまでもリフレクションのサンプルということでご容赦を。 1. 型名から型情報を得る

    C#リフレクションTIPS 55連発 - Qiita
  • MacでC#のコードをコンパイルして実行する - Qiita

    手元でちょっとしたC#プログラムを実行したい 最近のエディタは再生ボタンを押すだけで自動でコンパイルして実行までを行ってくれるので、手動でコンソールからコマンドを叩いてコンパイルすることの必要性はほとんどありませんが、学習のためにサンプルのクラスだけ作って実行結果を見たい時などは有用そうなので、手動コンパイル実行の手順をまとめてみました。 この記事はその記録になります。 DOS/Vとかの頃からプログラマだった人には当たり前すぎる内容かもしれません。 しかし、最近のゆとり開発環境に慣れきった自分は手動コンパイルをやったことがなかったので実際に試して見ました。 といってもMONOを使えば簡単にC#のコードをコンパイルして実行できました。 C#のコンパイラ(Mono)をインストール Monoとは Ecma標準に準じた.NET Framework互換の環境を実現するためのオープンソースのソフトウェ

    MacでC#のコードをコンパイルして実行する - Qiita
  • C# CODING GUIDELINES - Qiita

    目次 目次 このドキュメントについて 書の目的 開発環境 Visual Studio 命名規則 サンプルコード 共通スタイルの説明 二文字の名前(※変更) 名前空間 アセンブリ リソース ファイル クラス フィールド(※変更) 静的フィールド(≒グローバル変数)(※追加) コントロールのフィールド(※変更) プロパティ メソッド(≒関数、サブルーチン、ファンクション) 非同期メソッド(※追加) パラメータ(≒引数) ローカル変数、ループ変数 コンパイル時定数、実行時定数 抽象クラス インターフェイス デリゲート(≒関数ポインタ) イベント 構造体 列挙体 コーディング規則 レイアウト規則 コメント規則 長い名前 多い引数 多い演算子 自動プロパティ(※変更) 空のコンストラクタ(※追加) イベント処理(※変更) イディオム タブとスペースではスペースを使う ifの中括弧の省略はしない 否

    C# CODING GUIDELINES - Qiita
  • C#でモダンにスクレイピングするならAngleSharp - Qiita

    C#やVB.NETでWebページをスクレイピングする方法をWeb検索するとHtml Agility Packが見つかることが多いですが、APIはXHTMLXPATHといったXML技術をベースにしているので、今これを使うのは少々やぼったい印象があります。 じゃあ何がいいのか?ということですが、私はAngleSharpを強くお勧めします。 AngleSharpの利点 AngleSharpのどこがいいのか?は、改めて別の記事を書くつもりですが、ここでは簡単にまとめます。 HTMLだけでなく、SVG、MathML、CSSもパース可能です。 HTMLをパースするとW3CのWeb標準に従ったDOMが構築されます。HTML5ベースのため、閉じる必要のないタグ(<br>や<img>など)や閉じタグを省略可能なタグ(<li>、<dt>や<dd>、<tr>や<td>など)も正しく理解します。 Selecto

    C#でモダンにスクレイピングするならAngleSharp - Qiita
  • C#でJSONを扱うライブラリ「Json.NET」を使ってみました - Qiita

    2020/1/16追記 この記事を投稿してから5年が経過しましたが、 .NET Core 3.0から System.Text.Json が追加されました。 使用感はわかりませんが、Microsoft公式なのでこちらもご検討ください。 Json.NET http://www.newtonsoft.com/json C#.NETでJSONのパースを行うライブラリとして、 Json.NETを使ってみましたがとても便利です。 NuGetで導入できます。 シリアライズ メソッドSerializeObject()を使う。 シリアライズ対象クラス(UserModel) [JsonObject("user")] public class UserModel { [JsonProperty("id")] public int UserID { get; set; } [JsonProperty("name"

    C#でJSONを扱うライブラリ「Json.NET」を使ってみました - Qiita
  • C# 非同期、覚え書き。 - Qiita

    記憶力の悪い自分のために、C# における非同期処理の書き方を記述しておきたいと思います。 専門家ではないので、不出来な内容でもあしからず。 目次 Task async / await 並列処理 System.Threading の便利なクラス Task 皆さんおなじみの、非同期操作を表すクラスです。 生成および実行の方法が何通りかあります。 Task.Factory.StartNew 次のようにして Task を生成、実行します。 using System; using System.Threading.Tasks; class Program { static void Main(string[] args) { var task = Task.Factory.StartNew(() => Console.WriteLine("OK")); Console.ReadLine(); } }

    C# 非同期、覚え書き。 - Qiita
  • .NETのJSONシリアライザの速度比較 - Qiita

    C#で使いやすいJSON形式のシリアライザを探していたので、いくつか試してみるついでに速度検証をしてみました。 比較するシリアライザ 今回試すシリアライザは以下の4つです。 ・DataContractJsonSerializer(.NET Framework標準) → http://msdn.microsoft.com/ja-jp/library/system.runtime.serialization.json.datacontractjsonserializer%28v=vs.110%29.aspx ・Json.NET(↑以外では割と一般的でNuGetでも2番目に出てくる) → http://james.newtonking.com/json ・ServiceStack.Text.JsonSerializer(SeriveStackライブラリ付属のシリアライザ) → https://g

    .NETのJSONシリアライザの速度比較 - Qiita
  • 1