LoginSignup
3
6

More than 1 year has passed since last update.

C# 稀によく使う機能

Last updated at Posted at 2018-05-15

定数

System.Environment.NewLine;// 環境に応じた改行コード

引数

可変長引数

void Hoge(params int[] args)
{
...
}

#演算子

型変換

// 明示的型変換
public static explicit operator OutType(InType value)
{
}
// 暗黙的型変換
public static implicit operator OutType(InType value)
{
}

Null合体演算子

// nullの場合は"null"を返す
string text = hoge ?? "null";

Null条件演算子

// nullの場合はnullを返す
string text = hoge?.ToString();

LINQ

配列の生成

// 0,1,...,8,9 の配列を作成
int[] ary = Enumerable.Range(0, 10).ToArray();

// 1,1,...,1,1 の配列を作成
int[] ary = Enumerable.Repeat<int>(1, 10).ToArray();

配列の比較

bool x = ary1.SequenceEqual(ary2);// 同じならtrue

重複の削除

var list2 = list.Distinct();

集計

  • accumulator:累積値
  • 1回目の呼出では、accumulatorに第1要素が, itemに第2要素が入っている。
  • リストの要素数が1個の場合、要素がそのまま返される。
// 例:全要素を乗算
var mul = list.Aggregate((accumulator, item) => accumulator * item);

Dictionary のソート

  • キーでソート後、Dictionaryに戻す。
sample = sample.OrderBy(item => item.Key)
    .ToDictionary(item => item.Key, item => item.Value);
  • 値でソート後、Dictionaryに戻す。
sample = sample.OrderBy(item => item.Value)
    .ToDictionary(item => item.Key, item => item.Value);

#Enum

  • 文字列 → Enum値
  • 第3引数:大文字と小文字を区別しない=true 区別する=false
var value = (EnumType)Enum.Parse(typeof(EnumType), str, true);
  • Enum値 → 文字列
var str = value.ToString();
var str = Enum.GetName(typeof(EnumType), value);
  • Enum値一覧取得
var hogeTypes = (HogeType[])Enum.GetValues(typeof(HogeType));// System.Arrayが返されるので、キャストする。

Encoding

シフトJISエンコーディングの取得

var encoding = Encoding.GetEncoding("Shift_JIS");
  • コードページは932
  • 以下の名前でも取得可能(全パターンは試していないが、大文字小文字関係なさそう)
  • SHIFT_JIS
  • shift-jis
  • Shift-JIS
  • csShiftJIS
  • csWindows31J
  • ms_Kanji
  • x-ms-cp932
  • x-sjis

ToString のフォーマット

  • 浮動小数点数を指数表記ではなく普通の小数表記で表示するときは"0.#####…"を指定する。
  • ToString("G")の場合、0.00001ぐらいから指数表記になってしまう
  • ToString("F")の場合、精度99桁として"F99"を指定すると、0.00001は"0.00001000…"となり、不要な0が付く
  • float.Epsilon を表示するなら"#"が51個必要
  • double.Epsilon を表示するなら"#"が338個必要
  • スマートなやり方ではないが、調べた感じこうするしかない?
var str = value.ToString("0.##############");

2進数で表現した文字列に変換する

var str = Convert.ToString(hoge,2);

DateTime

  • 文字列に変換するときに、フォーマットを指定する
var dateTime = DateTime.Now;
dateTime.ToString("yyyy年MM月dd日 HH時mm分ss秒");// "2022年06月07日 14時26分01秒"になる
  • 文字列からDateTimeに変換するときに、フォーマットを指定する
var str = "2019/11/22 12:34:56";
var format = "yyyy/MM/dd HH:mm:ss";
var dateTime = DateTime.ParseExact(str, format, null);

IO

  • カレントディレクトリの取得
System.Environment.CurrentDirectory;
System.IO.Directory.GetCurrentDirectory();

実行ファイルのパスを取得

string path = System.Reflection.Assembly.GetExecutingAssembly().Location;

コメント

  • 例外を記述する
/// <exception cref="System.Exception">~~の場合にスローされます。</exception>
3
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6