或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。おバカなことが大好きです。

C#(C Sharp)

ローカル変数 'str' はこのスコープで既に定義されています。

同じ変数を同じスコープ内で二度宣言するとそう怒られる。使い捨ての変数にまでそこまで言われるのがうざい。。。スコープを区切ってやれば、怒られない。 Sample Code(サンプルコード) int num = 1; switch (num) { case 0: { string str = num.ToString();…

C#でファイル名や行数やメソッド名を取得する。

C++で言うところの、__LINE__とか__FILE__に相当するものは、C#には無い。プリプロセッサが無いから・・・。確かに、マクロって時にバグを生じさせやすいものだけれども、システムがデバッグ用のこういったマクロとかが無いのは不便。C#では、System.Diagnos…

i++と++iの違い。Pythonでは++は無い。>>> i++ SyntaxError: invalid syntax

Pythonじゃ++は使えないよ〜。 Sample Code(サンプルコード) >>> i++ SyntaxError: invalid syntax そもそもなんだが、++を有難く思っているプログラマの神経がわからない。C系の言語ではインクリメントがどうやら重要な処理だと思われているらしく、わざわ…

Listを連結してstringにする。

そのくらい一行で出来ないと納得出来ない。そのくらい、出来て当たり前だと思っている。スクリプト言語で言うところの空リテラルをセパレータとしたjoin、あるいは単なるjoin。VisualStudio2005でやったときは、コンパイラに怒られた・・・。何か間違ってい…

文字列から数値への変換int.ParseとConvert.ToInt32

文字列から数値への変換の際、ミスったので備忘録として書いておく。int.Parseは10進数を表す文字列以外が含まれていると例外をスローする。16進数の数値を表す文字列の場合は、Convert.ToInt32を使い、category(何進数か?)を指定してあげる。 Sample Code(…

100万円を金利20%複利で100年借りました。

Sample Code(サンプルコード) double yen = 1000000; for (int i = 0; i < 100; i++) { yen *= 1.2; Debug.WriteLine("{0}年後の借金は{1}円です。", i + 1, yen); } Result(実行結果) 1年後の借金は1200000円です。 2年後の借金は1440000円です。 3年後の借…

C#:変数を無限にインクリメントさせてループさせる。万物は流転する。オーバーフローの例外の検出方法。

変数を延々とインクリメントさせてループさせる。intとかでやると何行あっても足りないのでbyteでやってみる。 Sample Code(サンプルコード) byte b = 0; while (true) { b++; Debug.Write(b.ToString() + " "); } Result(実行結果) 1 2 3 4 5 6 7 8 9 10 11…

C#:辞書をイテレータとしてループしている中で辞書を変更すると例外が発生。コレクションが変更されました。列挙操作は実行されない可能性があります。

Sample Code(サンプルコード) Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("1", "a"); dic.Add("2", "b"); dic.Add("3", "c"); foreach (string key in dic.Keys) { if (dic.ContainsKey("1")) { dic.Remove("1"); } } Result(実行結果) コレクションが変更</string,></string,>…

C#::ビット反転の方法、2進数の桁数指定の書式(無理矢理感が漂う)で表示させてみた。

ビット反転ってのは、2進数においてつまりは1だったら0、0だったら1にするってこと。~演算子を使ってビット反転をさせられる。 Sample Code(サンプルコード) Debug.WriteLine(Convert.ToString(d, 2).PadLeft(32,'0')); Debug.WriteLine(Convert.ToString(~d…

C#::Enumの定義名と値を取得して出力してみた。Enum.GetValues(),Enum.Format()

Enumの使い方からちょっとずれているかもしれないが・・・。Enumの定義が以下だったとする。 enum DayofWeek { Sunday = 1, Monday = 2, Tuesday = 4, Wednesday = 8, Thursday = 16, Friday = 32, Saturday = 64, } とすると、定義名を取得したいこともあれ…

C#::int32を延々と左シフトさせてみる。

ビット演算のお勉強。まずは、1を無限に左しふとさせてみようと無限ループ内でシフトさせてみた。ビット演算とはなんぞや?と思う人下まで読み進めてみて下さい。ビットを左シフトさせるには、演算子を使う。 Sample Code(サンプルコード) Int32 d = 1; whil…

C#でヒアドキュメント

ヒアドキュメントは意外と使うので覚えておきたい。 Sample Code(サンプルコード) string str = @" line1 line2 line3 line4 "; Debug.WriteLine(str); Result(実行結果) line1 line2 line3 line4こんな感じで、改行も含めて、複数行の文字列を格納したい場…

intをHex(16進数)の桁数指定で表示する方法。

やり方はいろいろあるんだけどさ、やっぱり直感的にわかりやすいほうが覚えは間違いなくいい。 Sample Code(サンプルコード) int d = 100; Debug.WriteLine("{0:x4}",d ); Debug.WriteLine(d.ToString("x4")); Result(実行結果) 0064 0064結果は同じだけど、…

C#がBase64で表示出来ない残念さ。

Base64文字列で表示出来ないってのは、ウェブアドレス決めるときとかに不便だね・・・。CとC#の検索利便性って言語自体の名前のせいで、だいぶ差がついたと思うのは私だけ?ぐぐるときにも、C#で調べるかC Sharpで調べるかによって検索結果変わってくるし。…

C#の学び方

はじめてC言語を勉強したときと比べると、C#の勉強は楽だ。C言語は、覚えるべき言語仕様が少ないが、それ以上に使い方だとか、最適化など、言語以外で覚えることが多い。環境周りの知識も必要となるだろう。C#は、覚えるべき言語仕様は多いが、言語仕様さえ…

C# 数値の型名 MIN MAX を表示してみた。

C# 数値の型名 MIN MAX を表示してみた。型のメンバに定義を持っているので、意外とうまく表示出来た。表示形式は、はてな記法に決め打ちしたコードになっているが・・・。 Sample Code(サンプルコード) Debug.WriteLine("|{0}|{1}|{2}|{3}|","Type","System…

Debug.WriteLineで複数の引数を指定して表示する。

Debug.WriteLineで複数の引数を指定するには以下のように書く。 Sample Code(サンプルコード) Debug.WriteLine("{0}:{1}:{2}","arg0","arg1","arg2"); Result(実行結果) arg0:arg1:arg2

foreachの薦め

Cやっていた人なら、配列の添字がオーバーしてアクセス違反なんてのを経験したことがあるでしょう。max値とか定義して、0からmax-1まで、インクリメントしながらループさせるということをプログラマがやるわけ。おかげで、プログラマはこの手の細かくて几帳…

ASCIIのstringをhex(16進数)に変換してcharの配列入れる。

意外とこういうことが求められることはある。自前では作りたくない処理だ。C#では、これ系のライブラリもしっかりある。Cだったら、lengthとか見て、ループさせて作ったりするんだろうけど、パワフルな言語では1行で書ける。Perlだったら、空文字でsplitさせ…

文字列の連結は+演算子で。

C言語でプログラミングをしていたとき、strcatなんて使っていたのが懐かしい。そもそもcatって猫かよ?と思ったが、残念。Concatenateの略らしい。C#とかJavaのプログラマならわかると思うが、関数名とかメソッド名は中途半端に省略するなってのがマナーだ。…

Convert.ToInt32を使う。いい加減、16進数⇒10進数変換を暗算でやるなんていうことはシステムに任せませんか。

0xFFFFは10進数で何よ?暗算出来るひとは、慣れているんだろうね。俺も多少は慣れてはいるけど、だいたいでしか覚えてない。どうせ、システムが理解するわけだから、自分の頭の中の曖昧な記憶をもとにコーディングなんてことはやらん。これが、大きな数にな…

コンストラクタをprivateで定義して、クラスインスタンスをnew出来ないようにする。

singletonのデザインパターンの実装をするときによくやる技。明示的にprivateで引数無しコンストラクタを定義することにより、インスタンスが複数されないようにデザイン出来る。 namespace Test { class StringUtil { private StringUtil thisInstance = nu…

はてな記法でC#

bloggerでソースコードのシンタックスハイライトを使おうと思ったが、いまいち、サードパーティのjsを使うのは後々面倒そうなので、はてながいいなと思った。 ソースコードを 開始タグ>|cs||と終了タグ||<で挟むといいみたい。

コンストラクタの呼ばれるタイミング

クラスの機能を有するプログラミング言語においては、コンストラクタ・デストラクタは良い働きをする。例えば、mainのコードを以下のようにしたとする。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace …