goo blog サービス終了のお知らせ 

ただいま修行中...

ソフトウェア開発において、勉強中で悪戦苦闘の日々

C#が中途半端な言語になってきたような気がする

2012-09-16 23:10:14 | C#
最近でもないですが、C#3.0になってからラムダ式が採用されてからC#が動的言語を意識した言語使用になり、ちょっと中途半端になってきたなと感じます。

もともと静的型づけが厳しい言語であるので、いい面もあれば悪い面もあります。

C#3.0になってから不要なソースコードを書く必要がなくなってきましたが、いきなり変更されたので、最初はとっつきにくいと思います。

今後、どのようになっていくかはわかりませんが、中途半端な言語になるのだけはさけてほしいなと思います。

Luceneを利用してみた

2012-01-05 23:02:40 | C#
最近、全文検索のプログラムを作成するのに、Lucene(ルシーン)を利用する機会がありました。

@ITの記事を参考にして、プログラムを作成しましたが、本当にこれは便利だと思いました。

特にサンプルどおりに、HTMLのテキストを抽出して、インデックスを作成しましたが、本当に楽に作成することができました。

検索も非常に速くできるので、これは便利だと思いました。

ただし、Windowsの64ビットでは動作しないので、MecabDotNetのソースコードをダウンロードして、一部を修正しないと動作はしませんが

C#で処理速度を測る方法

2011-12-20 22:25:59 | C#
C#である処理の速度を測る方法は以下のようにすると簡単にできます。

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();

処理

sw.Stop();

Console.WriteLine(sw.Elapsed.ToString());

C#のShellClassはVista以降で利用

2011-10-26 22:45:16 | C#
C#のShellClassを利用して、ファイル検索の簡単なプログラムを作成したら、WindowsXP場で実行すると、「'Shell32.IShellDispatch5' にキャストできません。」とエラーが表示されてしまいました。

原因を調べてみると、IShellDispatch5の中のWindowSwitcherというメソッドの動作基準が、WindowsVista以降でないと、動作しないことがわかりました。

参考にしたURL:WindowSwitcher

ShellClassを利用できるのは、つまりVista以降になってしまうということです。
Shellを利用するならShellClassではなく、DLLを直接利用するということがわかりました。


Visual StudioからNUnitを起動する方法

2011-06-21 21:27:38 | C#
NUnitをVisual Studioから起動する方法として、通常であれば、クラスライブラリを作成して、プロジェクトのプロパティのデバッグのところの外部プログラムから起動するに、NUnitをインストールした場所を指定します。

次に、Windowsアプリケーション上で直接テストコードを書いて、NUnitを起動する方法です。

以下のようにメインのエントリポイントを通常のForm1が書いてい有る個所を以下のように書き直せば起動します。

class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
NUnit.Gui.AppEntry.Main(new string[] { System.Windows.Forms.Application.ExecutablePath });
}
}

後は、ファイルの追加で、テストコードを追加していけば、自動的にNUnitを起動することができます。

参照設定に、NUnit.GUI.Runner.dllを追加すれば、問題なく動作します。

C#のDataGridViewでTooltipを表示する方法

2010-05-24 23:09:43 | C#
C#のDataGridViewで、Tooltipを表示するためには、
列全体に表示する場合
DataGridView.Columns[ColumnIndex].ToolTip = "表示したい文字列";

行全体に表示する場合
DataGridView.Rows[RowIndex].ToolTip = "表示したい文字列";

セルに表示する場合
DataGridView[ColumnIndex, RowIndex].ToolTip = "表示したい文字列";

上記の対応でできます。

標準のコンポーネントのToolTipを表示しようとすると、表示することが出来ません。

これは、表示している文字列が切れたときに、ToolTipで表示するのでそちらに奪われてので、表示することがdできないのだと思われます。

列挙型使用時の注意点

2010-04-22 22:48:29 | C#
C#Javaを利用する際には、逆コンパイルをすると、簡単にソースコードの中身が見えてしまうので、難読化をして、簡単にソースコードを解析できないようにします。

難読化するのは、ソースコードというのは資産であるため、簡単に解析されてしまうと、技術が簡単に盗まれてしまうからです。

列挙型を利用する際に、Enum.GetName(typeof(列挙型),属性)とした際に、列挙型がinternal属性だと難読化したものが表示され、public属性だと難読化されずに正常に表示されます。

列挙型で文字列を使用する際には注意が必要です。

EnumのGetNameとGetType

2010-01-19 23:26:21 | C#
C#列挙型があります。その中のメソッドGetNameGetTypeがあります。

GetNameは、指定した値を持つ指定した列挙体にある定数の名前を取得します。 GetTypeは、現在のインスタンスの Type を取得します。

これらを組み合わせると、以下のようなことができます。

enum 天気
{
 晴れ、くもり、雨、雪
}

for(int i= 0;i<Enum.GetType(天気).Length;i++) {
Console.WriteLine(Enum.GetName(typeof(天気), i))
}
列挙型の天気の一覧を出力することができます。

ジェネリックについて

2009-12-11 23:05:00 | C#
.Net Framework2.0から追加されたジェネリックという機能があります。

これは、以前はArrayListにセットしたデータをゲットする際に、キャストをしなくてはなりませんでした。

しかし、Listを利用すれば、キャストをすることなく利用できるのです。

サンプルとして、以下のようになります。

List<int> intList = new List<int>();
intList.Add(1);
intList.Add(2);

int i = intList[0];

Dictionaryクラス使用時の注意点

2009-11-30 22:42:56 | C#
Dictionaryクラスを使用するときに、注意しなくてはならない部分があります。

それは以下のサンプルコードを読むと、判りますが、勝手にリストに追加されてしまうということです。

Dictionary<int, int> data = new Dictionary<int, int>();
for (int i = 0; i <10; i++) data[i] = i * 10; 上記のようなコードを書くと、data.Add(i, i * 10)とプログラマが明示的に追加しなくてもリストに追加されてしまうということです。

明示的に追加メソッドをコールしていないのに、リストに追加されてしまうのは一見便利なようですが、バグを生む原因になってしまいます。

間違ってキーを設定して、値をセットすると、リストが元々意図した数ではなくなってしまう可能性があるのです。

プログラマがかなり気をつけて、コーディングしないと、勝手に追加されてしまうので、不要なものができてしまいます。

便利なようで、結構厄介なので、使用時には注意が必要であると思います。