2008年06月25日

if (Hoge()) はエラー?

   このエントリーをはてなブックマークに追加 Clip to Evernote
問題です。

C#で、

if (Hoge()) { Console.WriteLine("Hoge() == true") ;}

がコンパイルエラーで、

if (Hoge() == true) { Console.WriteLine("Hoge() == true"); }

が、コンパイルエラーにならないって、どんな場合でしょうか?
  

Posted by gushwell at 22:03Comments(8)TrackBack(0)

2008年06月23日

Nullableかどうかを判断する

   このエントリーをはてなブックマークに追加 Clip to Evernote
ローカル変数 int? x が宣言されているときに、オブジェクト x が、nullableかどうかを調べる方法は無いのかな?
まあ、ローカル変数なんだから、それは、明らかに、nullableだってわかるから
そんな場面はないか?

じゃあ、引数でわたってきた場合は、これも同じ理由で nullableってわかる。
引数の型がobject の場合は、実際の型が nullableかどうかを知る手段はないけど、
== null とか聞けばいいんだから、これも無くても困らないような気がする。

結局、nullableかどうかを調べる必要があるのは、クラスのメンバー変数だけかな。
この場合は、リフレクションを使って、FieldInfoを取り出せば、

Type type = fieldInfo.FieldType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<> )) {…}

というコードで判断できる。

ところで、

typeof(Nullable<>)

なんていう書き方が出来るのを最近まで知らなかった。
  
Posted by gushwell at 22:33Comments(0)TrackBack(0)

2008年06月21日

読者数減

   このエントリーをはてなブックマークに追加 Clip to Evernote
メルマガの読者数が、一気に30人も減です。
約2年前ほど、Macky!というメルマガ配信スタンドのサービスが終了したときに、
読者がどんと減りましたが、それ以来の現象ですね。
まあ、あの時は特殊事情だったので仕方ないとして、今回はそうではないので、
残念です。

僕のメルマガの内容は、すぐに使えるサンプルとかTIPSのようなものは扱っていなく
て、地道に文法や、.NET Frameworkの使い方を解説してゆくタイプなので、面白みに
かけるかな?と自分でも思うときがあるので、そういった理由から読者数が減った
のでしょうか。
それとも 今書いているLINQは、読者の要求とマッチしなかったからでしょうか。

とりあえず、もう1,2週様子を見てみることにします。



6/21 22:49 追記

「まぐまぐ!」側で、メールマガジン配送後に送信エラーメールが返ってくる、無効なメールアドレスを解除したためらしい。30名はもともと幽霊読者だったわけですね。


  
Posted by gushwell at 11:08Comments(0)TrackBack(0)

2008年06月19日

Nullable型のType

   このエントリーをはてなブックマークに追加 Clip to Evernote
int? a = 10;
Type type = a.GetType();
Console.WriteLine(type.Name);

を実行すると、

Int32

って表示されるんだ。

Nullable`1

って表示されるのかと思った。


当然なのだが、

a = null;
type = a.GetType();

だと、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
と、例外が発生する。
そういう意味では、Int32と表示されるのは。理にかなっているのかな?

  
Posted by gushwell at 22:13Comments(0)TrackBack(1)

2008年06月18日

ジェネリックメソッドの型推論

   このエントリーをはてなブックマークに追加 Clip to Evernote
最近、ようやく(今頃になって?)、C#2.0が体に沁みこんできたせいか、
ジェネリックスを使うことが多くなってきたのだが、
次のようなコードで嵌った。
 static void Main(string[] args) {
Foo(10);
int[] array = new int[] { 1,2,3 };
Foo(array);
IEnumerable<int> nums = new int[] { 1, 2, 3 };
Foo(nums);
}

static void Foo<T>(T obj) {
Console.WriteLine("T obj");
}

static void Foo<T>(IEnumerable<T> objs) {
Console.WriteLine("IEnumerable<T> objs");
}


この結果だが、

T obj
IEnumerable objs
IEnumerable objs

と表示されるのかと思ったら、

T obj
T obj
IEnumerable objs

だった。
前者だったら良かったのに。  
Posted by gushwell at 22:58Comments(2)TrackBack(0)

2008年06月12日

Array.ForEach

   このエントリーをはてなブックマークに追加 Clip to Evernote
string[] items;

に対して、

items.ForEach( s => Foo(s) );

と書いたら、エラーになる。これでしばらく悩みました。
ForEachメソッドは、自分で定義していた C#の拡張メソッドでした orz..

標準のコードは、

Array.ForEach(items, s => Foo(s));

ですね。
参照設定して、usingしないと使えないのは面倒です。
標準で用意してほしかったな。  
Posted by gushwell at 23:33Comments(0)TrackBack(0)

2008年06月10日

VistaでMicrosoft Visual Studio Version Selectorが無反応

   このエントリーをはてなブックマークに追加 Clip to Evernote
Vista + Visual Studio 2008 では、Visual Studio 2008を管理者権限として動作させることが推奨されているので、"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"を管理者権限で動作させるようにしているのだけど、その関係か、.slnファイルをダブルクリックしても、Visual Studioが起動しない。
エラーメッセージも表示されない。ただ、黙って終了してしまう。

調べてみたら、Microsoft Visual Studio Version Selectorも管理者権限にしないといけないようだ。

"C:\Program Files\Common Files\microsoft shared\MSEnv\VSLauncher.exe"
も管理者権限で動作するようにしたら、無事起動するようになった。  
Posted by gushwell at 21:21Comments(0)TrackBack(0)

2008年06月09日

ノートPCのバッテリー壊れた

   このエントリーをはてなブックマークに追加 Clip to Evernote
ThinbkPadT60の電源を入れたら、タスクトレイに、「バッテリーに修復不可能なエラーが検出されました」とのエラーメッセージが出ている。

バッテリーランプも緑からオレンジに変わっているし、どうもバッテリーパックが壊れたようだ。

LenovoのWebsサイトを見たら、「バッテリー自主回収のお知らせ」というページがある。
きっと、これに該当しているんだなと考え、交換対象かどうかを調べるプログラムをダウンロードして調べると、
「お客様のバッテリーは自主回収の対象外です。」

えーっ、そんなー。
諦めの悪い僕は、さらにWebで調べてみると、日本語のLenovoのサイトと、英語のLenovoのサイトだと、交換対象のバッテリーが異なっているらしい。

で、http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&lndocid=MIGR-67765
のページを見てみたら、僕の92P1137という番号は、交換対象のようだ。
判断プログラムをダウンロードして動かしてみたら、

-------
Your battery is eligible for replacement.

We sincerely apologize for the inconvenience.
Click Continue to request your replacement battery online.
-------
と表示される。これって、交換対象ってことでしょ?

なんで????
Lenovo Japanのサポートって、どうなってるんだろう?


夜中は、サポートの電話の受付時間外なので、修理交換のWebページから
連絡を入れておいた。

さて、どんな返信がくるのかな。

-----------
6月12日追記
webから連絡を入れたら、翌日の朝、IBMから電話がかかってきた。
サポートは、レノボではなく。IBMがやっているみたい。

「交換の品物を送るから、1ヶ月以内に壊れたバッテリーを送り返してください」

とのこと。
まあ、アメリカでは交換対象なんだから、当たり前といえば、当たり前ですね。

「どうして、日本とアメリカでは対応が異なるのか」という質問をしようかとも思ったのだが、あまりにもあっけなく、交換OKになってしまったので、そのまま
「では、宜しくお願いします」
で、電話を切ってしまった。

電話が来た翌日には、新しいバッテリーが家に届いていました。

すばやい対応だったので、良しとしよう。

でも、交換できるのを知らずに、バッテリーを買い換えた人も多いんだろうな?

  
Posted by gushwell at 22:56Comments(0)TrackBack(0)