C#

C#で「ちょっと待ってから実行する」

C#

最近ようやくC# 6が使える環境になりました。ずっと3.0止まりだったので、急に世界が変わった気がします。で、表題の件。 Task.Run(async () => { await Task.Delay(ちょっと); 何か(); }) みたいな感じで良いんだろうか、と思ったけどDelayはTaskを返すので…

配列を任意の値で初期化(fill)したい

0で初期化するなら何の苦労もないのだけど、1とか10にしたいって時。C++ならstd::fillがあるので: int arr[5]; std::fill(arr, arr + _countof(arr), 10); と書ける。さらにstd::vectorには初期値をコンストラクタで指定できるから: std::vector<int> arr(5/*要素</int>…

NUnit2.6でTestCaseにint以外の整数を使う場合は整数リテラルで型を明示する必要がある

C#

[TestCase(1)] public void Test(ulong n) { // ... } などと書いた場合、整数を書くとintと認識されるので: Test(1), Failed: System.ArgumentException : 型 'System.Int32' のオブジェクトを型 'System.UInt64' に変換できません。 というエラーが出てテ…

C# 3.0(以降)で自動プロパティにブレークポイントを設定する

C#

C# 3.0から自動プロパティが実装され、フィールドの定義を省略できるようになりました。これはとても便利なのですが、getter/setterを書かないため、ブレークポイントが張れないという問題がありました。通常のプロパティでは下図のようにget/set内でブレー…

任意のディレクトリの下にあるファイルを再帰的に見に行く

C#

特定のディレクトリの下にあるすべてのファイルを再帰的に見たい、という場合、Directory.GetFilesメソッドに再帰オプションを指定すると良いようです。 // GetFilesの第三引数に SearchOption.AllDirectories を指定すると、サブディレクトリも再帰的に見て…

ExcelをC#で操作する

C#

Excelで何かしようと思ったらVBAを使うのが普通なのでしょうが、VBはあまり好きじゃないのです。POIを使えばJavaやScala等でもファイルを吐けますし、Win32OLEを使えばRubyや、あるいはPerlなどでも操作できますが、インテリセンスが使えるのでC#がお手軽じ…

シーケンスから重複した要素を取り除くには(Unique)

C#

配列やらリストから重複を除いて一意な値を取り出したいということはよくありますが、LINQではEnumerable.Distinctメソッドを利用すると一発で実現できるようです。MSDNのサンプルそのままですが: int[] arr = {21, 46, 46, 55, 17, 21, 55, 55}; var uniq =…

LINQでFizzBuzz

C#

超既出でしょうけれども気にせずに。自宅ノートがWindowsになりC#3.0が気軽に触れるようになったので、LINQも少しは覚えておこうかと、FizzBuzzを書いてみました。仕事ではまだまだC#2.0なので実践する機会は当分無さそうではありますが……。今回は上記のペー…

foreachで受け取る型に制限がない?

C#

class Program { interface IAnimal { } class Dog : IAnimal { public void say() { Console.WriteLine("ワン"); } } class Cat : IAnimal { } static void Main(string[] args) { IAnimal[] dogs = new IAnimal[1] { new Cat() }; foreach (Dog d in dogs)…

複数の配列をひとつのループで処理したい in C#

元ネタ : 複数の配列をひとつのループで処理したい - ベイダー日記定期的に欲しくなるので複数の配列を受け取って要素をひとつずつ返すようなメソッドを作りました。手元の環境はC#2.0で拡張メソッドなんてないので以下のようなメソッドをどこかのユーティリ…

インターフェイスと、インターフェイスの持つメソッドと同じシグネチャのメソッドを持つインターフェイスと無関係なクラスを結合する(?)

C#

昨晩NPlotのソースを読んでいて気付いたのですが、C#では以下のようなことができるみたいです。 namespace Test { public interface IHello { void Say(); } public class HelloBase { public void Say() { Console.WriteLine("Hello!"); } } public class H…

色んな型の配列をGenericsで操作する

C#

C#で配列中で最も大きな要素を得るためのメソッドを書いたときに、配列がintとdoubleとか複数の型を持っているといちいちオーバーロードしなきゃいけなくて面倒くさい! C++なら std::max_element でなんでも扱えるのに……。ということで少し考えてみた。intも…

別プロセスの実行結果を逐次取得する

非同期でfindstrを実行する文字列検索ツールの作成:CodeZine別プロセス(findstr)の実効結果をリアルタイムにリストボックスに追加するためにデリゲートを使用していますが、これは大げさなような(例として使いやすかったから使っているだけでしょうが)。こ…

C#でLoadLibraryを使用してアンマネージDLLを使用する

C#(.NET)でアンマネージDLLを使用するには、DllImport属性を使用するのが記述量も少なく、面倒なことを考えずに済むので一番楽だと思います。 [DllImport("user32.dll")] private static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaptio…

??演算子

C#

やばい今始めて知った。 return hoge != null ? hoge : foo; みたいなコードをResharperが強調していて、見ると「??演算子を使うといいよ」などと仰る。試しにQuick Fixしてみると以下のようなコードになった。 return hoge ?? foo; プログラミングMicrosoft…

匿名メソッドで引数を省略

C#

イベントに匿名メソッドを割り当てる時に、そのイベントの引数を使用しない場合は引数宣言を省略することができるらしい。 button.Click += delegate { /*...*/ }; Resharperに教えてもらいました。

dotTrace (.NET Profiler)

Performance and Memory Profiler - JetBrains dotTrace プロファイラって使ったことなかったんですけどこれすごいですね。ボトルネックになっている部分が一目でわかりました。すばらしい。おかげでパフォーマンスが90%向上したよ!(どれだけ遅かったんだ)と…

本屋

川崎のあおい書店に技術書が多く揃っているという事で行ってきたのですが、品揃えが豊富ですごかったです。面白そうな本がたくさんあってうろうろしているだけで楽しかったです。レジに辿り着く頃には2時間くらい経っていました。とりあえず、あまりお金もな…

Sandcastleでドキュメントを生成

Sandcastle(のCTP版ダウンロードページ) MSより提供されているドキュメント生成ツール。JavaDocとか、Doxygenとか、そういう感じの。Visual StudioはソースコードにXML形式でコメントを書いておくと、それを自動で読み取ってひとつのXMLファイルにまとめてく…

プライベートメソッドのテスト

C#でprivateなメソッドをテストしたい時ってどうするのが定石なのだろう。C++では、#define private publicなんていう恐ろしい手があるらしいですが、C#だとリフレクションとか使って頑張るしかないのでしょうか。リフレクションまだ勉強してないのでさっぱ…

UnitRun

菊池 Blog - 菊池 Blog 経由で、ResharperというVisual Studioのアドインに含まれているユニットテスト機能がフリーで公開されたとのことなので入れてみました。 ReSharper UnitRun :: The Best Runner in .NET Unit Testing Marathon 昨日知って触ってみた…

C# で COM インターフェイスを操作

アプリをテストするのに Ruby やら JScript やらを使って COM インターフェイスをあれこれしていたのですが、今の所テストは好きな言語でいいのだし、見た目にもちょっとインパクトがほしいなあと思って C# 使ってみました。いや、実際 EXE の中のウィンドウ…

enum で定義された値を foreach でこねくり回す

列挙体を列挙しちゃうよ! なんて……。 public enum Sample { A = 100, B = 200, C = 500 } class Program { static void Main(string[] args) { foreach (int n in Enum.GetValues(typeof(Sample))) { Console.WriteLine(n); } Console.ReadLine(); } }C# で…

C# で他に抑えておきたいところ

そういえば C# で興味を持っているものが他にもあったのだった。とりあえずメモだけしておこう。 MSBuild DI コンテナ NUnit (Unit Test) というか言語そのものもそろそろちゃんと理解しておいた方が良いような気もする。

EXE サーバできた

プロジェクトオプションを変更して、一度クラスライブラリを生成してからレジストリに登録されている値を比較してみたところ、クラスライブラリのほうは CodeBase というキーに生成した dll のパスが入っていて、どうもこれが exe の時に設定されていなかっ…

exe サーバ

C# で、というか .NET Framework で exe サーバって作れないんでしょうか。クラスライブラリならプロジェクトプロパティの「COM 相互運用機能の登録」とすると何もしなくても外からライブラリの中で定義したクラスを扱えるみたいですが、普通の exe を作ると…

B-spline

ラグランジュより仕事で使っているものを理解しておいた方が良いかと思うので次は B スプライン補間をしてみます。 B-Spline -- from Wolfram MathWorld 式を見て初めて B スプラインは外挿を行えない理由がわかりました。ただ、ノットベクトルの方がよくわ…

NPlot

.NET Framework で使えるグラフ描画ライブラリ。データをセットするだけで簡単にプロットが描ける上、凡例なども出せるようです。自分でグラフを描くのが面倒なので導入してみましたが、これはなかなか便利です。軸とか作るの、仕事ではやってるけど家で暇潰…

C# はオブジェクトの生存期間 (スコープ) を定義できる

あんまり C++ に偏ってもいけないか……ということで。Java は知らないけれど(後で調べる) C# ではオブジェクトの生存期間を定めることができます。つまり RAII idiom は C# でもできたりします。>using System;namespace raii { class hoge : IDisposable { p…

cpp_to_hatena を GUI で

C# の練習。 .NET Framework ちょう便利。VC2005 と VC#2005 同時起動していても全然ストレスが無く動作してる。ノートだと VC2005 単体でももっさりしていたのに。メモリ 2G は伊達じゃないということか。