サンプルコード
C# のサンプルコード一覧
C# で「○○するには」を解決するコードサンプル。31 件。
他の言語から探す
カードの実行確認済みは、この言語のコードを実際に実行して出力を確認したことを表す。静的確認は、実行環境を用意できず、構文と公式 API ドキュメントで確認したものである。
環境変数の一覧を取得するには
Environment.GetEnvironmentVariables は非ジェネリックの IDictionary を返すので、Cast<DictionaryEntry> で LINQ に載せてから並べ替える。Windows では名前の大文字小文字が区別されないため、比較子も OrdinalIgnoreCase に揃える。
実行確認済み
正規表現に一致する部分をすべて取り出すには
Regex.Matches は一致した Match をまとめて返し、各 Match の Groups[1] が丸括弧の中身になる。MatchCollection は IEnumerable なので、LINQ をそのままつないで必要な形に変換できる。
実行確認済み
HTTPリクエストにタイムアウトを設定するには
HttpClient.Timeout はそのインスタンスの全リクエストに効く既定値で、リクエストごとに短くしたいときは CancellationTokenSource の期限を渡す。どちらの経路でも投げられるのは TaskCanceledException なので、InnerException が TimeoutException かどうかで理由を見分ける。
実行確認済み
正規表現で部分文字列を取り出すには
Match.Groups は名前でも番号でも引ける。存在しない名前を渡しても例外にはならず、Success が false で Value が空文字のグループが返るため、必要なら Success を確認する。Match.Success が false のときは全体として一致していない。
実行確認済み
文字列が正規表現に一致するか調べるには
Regex.IsMatch は真偽値を返す静的メソッドで、既定では部分一致を見る。全体一致にしたいときは ^ と $ を明示する。同じパターンを何度も使うなら RegexOptions.Compiled を付けた Regex インスタンスを使い回すと、毎回の解析を避けられる。
実行確認済み
正規表現で置換するには
Regex.Replace は既定で全件を置き換える。件数を絞りたいときは静的メソッドではなく Regex インスタンスの Replace に count を渡す。置換文字列の中では $1 で後方参照でき、MatchEvaluator を渡すと一致ごとに結果を組み立てられる。
実行確認済み
2つの日付の差を求めるには
DateTime 同士を引くと TimeSpan が返る。Days は日数部分だけを整数で返すのに対し、TotalHours や TotalDays は端数を含む小数を返す。Days と TotalDays は名前が似ていて意味が違うため、丸めたいのか総量が欲しいのかで選び分ける。
実行確認済み
文字列が含まれるか調べるには
string.Contains(string) は序数比較で、既定では大文字小文字を区別する。無視したいときは第2引数に StringComparison.OrdinalIgnoreCase を渡す。IndexOf(string) は既定がカルチャ依存の比較になるため、実行環境のロケールで結果が変わらないよう StringComparison.Ordinal を明示するのが安全である。
実行確認済み
配列から重複を除くには
LINQ の Distinct は列挙順を保ったまま重複を除き、元の配列は変更しない。int や string は既定の等値比較で判定されるため、そのまま渡せば期待どおりに動く。
実行確認済み
配列を文字列に連結するには
string.Join にはジェネリックな IEnumerable<T> を取るオーバーロードがあり、各要素の ToString が呼ばれるため数値配列も変換なしで連結できる。LINQ の Select を挟めば加工と連結を 1 行で書ける。
静的確認
文字列を分割するには
string.Split は区切りを文字列として扱い、正規表現は解釈しない。count を渡すと返す要素数の上限になり、あふれた分は最後の要素へまとめて残る。連続する空白で空文字が混ざるのを避けたいときは StringSplitOptions.RemoveEmptyEntries を指定する。
実行確認済み
配列を条件で絞り込むには
LINQ で絞り込みを担うのは Where で、Filter という名前のメソッドは無い。戻り値は遅延評価される IEnumerable なので、結果を配列やリストとして固定したいなら ToArray や ToList を呼ぶ。
実行確認済み
ディレクトリ内のファイル一覧を取得するには
EnumerateFiles はファイルだけを返すため、ディレクトリを除く判定は要らない。GetFiles と違って結果を配列に溜めずに列挙するので、項目数が多いディレクトリでも先頭から処理を始められる。
実行確認済み
ネストしたJSONから値を取り出すには
JsonNode のインデクサはキーが無いと null を返すので、?. で繋いで最後に ?? で既定値を与える。JsonNode から int? や string? への明示的キャストが用意されており、型が合わなければ実行時に例外になる。
実行確認済み
HTTPリクエストにヘッダーを付けるには
毎回同じヘッダーは HttpClient の DefaultRequestHeaders に、そのリクエストだけのヘッダーは HttpRequestMessage の Headers に置く。User-Agent や Accept は型付きのコレクションになっているため、文字列をそのまま入れずに ParseAdd を通す。
実行確認済み
環境変数を設定するには
SetEnvironmentVariable は第 3 引数を省くと Process スコープになる。Windows では EnvironmentVariableTarget.User や Machine を指定してレジストリへ永続化できるが、その場合も既に起動しているプロセスには伝わらない。Unix 系では Process 以外のスコープが存在しないため、User や Machine を指定しても何も起きない。
実行確認済み
.env ファイルを読み込むには
DotNetEnv の Env.Load は読み込んだ値をプロセスの環境変数へ設定するため、以後は Environment.GetEnvironmentVariable で取り出せる。ASP.NET Core では appsettings.json と環境変数を束ねる構成システムが標準で用意されているので、.env を使うのはコンソールアプリや開発時に限るとよい。
静的確認
日付文字列を日付型にするには
DateTime.Parse は既定で実行環境のカルチャに従うため、同じ文字列でも動く PC によって結果が変わる。書式が決まっているなら ParseExact に CultureInfo.InvariantCulture を渡して固定する。失敗を例外にしたくない場面では TryParseExact を使い、戻り値の bool で成否を判定する。
実行確認済み
文字列の前後の空白を除去するには
string.Trim は引数なしで前後の空白を落とし、char を渡すとその文字の集合を除去する。Python や Go と同じく集合として扱われるので、"banana".Trim('b', 'a') は "nan" になる。接頭辞だけを外したいときは StartsWith で確かめてから Substring で切るか、TrimStart ではなく明示的に処理する。
実行確認済み
HTTP POSTでJSONを送るには
System.Net.Http.Json の PostAsJsonAsync を使うと、シリアライズと Content-Type の付与を任せられる。HttpClient を static フィールドで使い回すのは、リクエストごとに生成して破棄すると TIME_WAIT のソケットが積み上がって SocketException に至るためである。既定のプロパティ名は camelCase へ変換されるので、title / body / userId として送られる。
実行確認済み
ファイルが存在するか調べるには
File.Exists は対象がディレクトリのときや権限が無いときも例外を投げず false を返す。判定できなかったのか本当に無いのかを区別したい場合は、FileInfo や実際の open の例外で確かめる。
静的確認
オブジェクトをJSON文字列にするには
System.Text.Json の既定のエンコーダは非 ASCII 文字を \uXXXX へ逃がすため、日本語をそのまま出したいときは UnsafeRelaxedJsonEscaping を指定する。WriteIndented を true にすると整形出力になり、キー名を camelCase にしたいときは PropertyNamingPolicy を設定する。
静的確認
日付を書式付きの文字列にするには
ToString に書式文字列を渡すのが基本形だが、区切り文字の / は実行環境のカルチャに応じて置き換えられる。ファイル名や API の入力に使う文字列なら CultureInfo.InvariantCulture を明示して固定する。
静的確認
環境変数を読むには
Environment.GetEnvironmentVariable は未設定のとき null を返す。?? 演算子で既定値を与えると未設定でも安全に扱える。ユーザー単位やマシン単位を指定するなら第 2 引数に EnvironmentVariableTarget を渡す。
静的確認
ファイルを読み込むには
File.ReadAllText はファイル全体を読み込んで文字列として返す。エンコーディングを省略すると UTF-8 として扱われるが、意図を明示するために引数で渡しておくと環境差で迷わない。
静的確認
ファイルに書き込むには
File.WriteAllText はファイルの作成・書き込み・クローズをまとめて行い、既存ファイルは上書きする。末尾に足したいときは File.AppendAllText を使い、文字化けを避けるためエンコーディングを明示する。
静的確認
HTTP GETリクエストを送るには
HttpClient は static フィールドとして 1 つ作り回すのが定石である。リクエストごとに new して using で破棄すると、TIME_WAIT のソケットが積み上がって SocketException に至るためである。GitHub API は User-Agent が無いリクエストを 403 で弾くが、HttpClient は既定で User-Agent を送らないため、静的コンストラクタで DefaultRequestHeaders に明示している。EnsureSuccessStatusCode() は 4xx / 5xx を例外に変える。
静的確認
配列をソートするには
Array.Sort は配列をその場で昇順に並べ替える破壊的メソッドである。元の配列を保ちたいときは LINQ の OrderBy / OrderByDescending を使うと新しい列を返す。キー指定も OrderBy(x => x.Field) で書ける。
静的確認
現在時刻を取得するには
DateTime は Kind プロパティでローカルか UTC かを区別するだけで、UTC からのオフセットそのものは保持しない。時差を含めて正確に記録したいなら DateTimeOffset を使うほうが安全である。
静的確認
JSONをパースするには
System.Text.Json は既定でプロパティ名の大文字小文字を区別する。camelCase の JSON を受け取るときは PropertyNameCaseInsensitive を有効にしないと値が入らない。
静的確認
文字列を置換するには
String.Replace は正規表現を使わないリテラルの全置換で、置換後の新しい文字列を返す。最初の1回だけ置換する専用メソッドは無いため、位置を IndexOf で調べて Substring で組み立てるか正規表現を使う。
静的確認