2008年06月25日
if (Hoge()) はエラー?
問題です。
C#で、
if (Hoge()) { Console.WriteLine("Hoge() == true") ;}
がコンパイルエラーで、
if (Hoge() == true) { Console.WriteLine("Hoge() == true"); }
が、コンパイルエラーにならないって、どんな場合でしょうか?
C#で、
if (Hoge()) { Console.WriteLine("Hoge() == true") ;}
がコンパイルエラーで、
if (Hoge() == true) { Console.WriteLine("Hoge() == true"); }
が、コンパイルエラーにならないって、どんな場合でしょうか?
2008年06月23日
Nullableかどうかを判断する
ローカル変数 int? x が宣言されているときに、オブジェクト x が、nullableかどうかを調べる方法は無いのかな?
まあ、ローカル変数なんだから、それは、明らかに、nullableだってわかるから
そんな場面はないか?
じゃあ、引数でわたってきた場合は、これも同じ理由で nullableってわかる。
引数の型がobject の場合は、実際の型が nullableかどうかを知る手段はないけど、
== null とか聞けばいいんだから、これも無くても困らないような気がする。
結局、nullableかどうかを調べる必要があるのは、クラスのメンバー変数だけかな。
この場合は、リフレクションを使って、FieldInfoを取り出せば、
Type type = fieldInfo.FieldType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<> )) {…}
というコードで判断できる。
ところで、
typeof(Nullable<>)
なんていう書き方が出来るのを最近まで知らなかった。
まあ、ローカル変数なんだから、それは、明らかに、nullableだってわかるから
そんな場面はないか?
じゃあ、引数でわたってきた場合は、これも同じ理由で nullableってわかる。
引数の型がobject の場合は、実際の型が nullableかどうかを知る手段はないけど、
== null とか聞けばいいんだから、これも無くても困らないような気がする。
結局、nullableかどうかを調べる必要があるのは、クラスのメンバー変数だけかな。
この場合は、リフレクションを使って、FieldInfoを取り出せば、
Type type = fieldInfo.FieldType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<> )) {…}
というコードで判断できる。
ところで、
typeof(Nullable<>)
なんていう書き方が出来るのを最近まで知らなかった。
2008年06月21日
読者数減
メルマガの読者数が、一気に30人も減です。
約2年前ほど、Macky!というメルマガ配信スタンドのサービスが終了したときに、
読者がどんと減りましたが、それ以来の現象ですね。
まあ、あの時は特殊事情だったので仕方ないとして、今回はそうではないので、
残念です。
僕のメルマガの内容は、すぐに使えるサンプルとかTIPSのようなものは扱っていなく
て、地道に文法や、.NET Frameworkの使い方を解説してゆくタイプなので、面白みに
かけるかな?と自分でも思うときがあるので、そういった理由から読者数が減った
のでしょうか。
それとも 今書いているLINQは、読者の要求とマッチしなかったからでしょうか。
とりあえず、もう1,2週様子を見てみることにします。
6/21 22:49 追記
「まぐまぐ!」側で、メールマガジン配送後に送信エラーメールが返ってくる、無効なメールアドレスを解除したためらしい。30名はもともと幽霊読者だったわけですね。
約2年前ほど、Macky!というメルマガ配信スタンドのサービスが終了したときに、
読者がどんと減りましたが、それ以来の現象ですね。
まあ、あの時は特殊事情だったので仕方ないとして、今回はそうではないので、
残念です。
僕のメルマガの内容は、すぐに使えるサンプルとかTIPSのようなものは扱っていなく
て、地道に文法や、.NET Frameworkの使い方を解説してゆくタイプなので、面白みに
かけるかな?と自分でも思うときがあるので、そういった理由から読者数が減った
のでしょうか。
それとも 今書いているLINQは、読者の要求とマッチしなかったからでしょうか。
とりあえず、もう1,2週様子を見てみることにします。
6/21 22:49 追記
「まぐまぐ!」側で、メールマガジン配送後に送信エラーメールが返ってくる、無効なメールアドレスを解除したためらしい。30名はもともと幽霊読者だったわけですね。
2008年06月19日
Nullable型のType
int? a = 10;
Type type = a.GetType();
Console.WriteLine(type.Name);
を実行すると、
Int32
って表示されるんだ。
Nullable`1
って表示されるのかと思った。
当然なのだが、
a = null;
type = a.GetType();
だと、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
と、例外が発生する。
そういう意味では、Int32と表示されるのは。理にかなっているのかな?
Type type = a.GetType();
Console.WriteLine(type.Name);
を実行すると、
Int32
って表示されるんだ。
Nullable`1
って表示されるのかと思った。
当然なのだが、
a = null;
type = a.GetType();
だと、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
と、例外が発生する。
そういう意味では、Int32と表示されるのは。理にかなっているのかな?
2008年06月18日
ジェネリックメソッドの型推論
最近、ようやく(今頃になって?)、C#2.0が体に沁みこんできたせいか、
ジェネリックスを使うことが多くなってきたのだが、
次のようなコードで嵌った。
この結果だが、
T obj
IEnumerable objs
IEnumerable objs
と表示されるのかと思ったら、
T obj
T obj
IEnumerable objs
だった。
前者だったら良かったのに。
ジェネリックスを使うことが多くなってきたのだが、
次のようなコードで嵌った。
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
IEnumerable
と表示されるのかと思ったら、
T obj
T obj
IEnumerable
だった。
前者だったら良かったのに。
2008年06月12日
Array.ForEach
string[] items;
に対して、
items.ForEach( s => Foo(s) );
と書いたら、エラーになる。これでしばらく悩みました。
ForEachメソッドは、自分で定義していた C#の拡張メソッドでした orz..
標準のコードは、
Array.ForEach(items, s => Foo(s));
ですね。
参照設定して、usingしないと使えないのは面倒です。
標準で用意してほしかったな。
に対して、
items.ForEach( s => Foo(s) );
と書いたら、エラーになる。これでしばらく悩みました。
ForEachメソッドは、自分で定義していた C#の拡張メソッドでした orz..
標準のコードは、
Array.ForEach(items, s => Foo(s));
ですね。
参照設定して、usingしないと使えないのは面倒です。
標準で用意してほしかったな。
2008年06月10日
VistaでMicrosoft Visual Studio Version Selectorが無反応
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"
も管理者権限で動作するようにしたら、無事起動するようになった。
エラーメッセージも表示されない。ただ、黙って終了してしまう。
調べてみたら、Microsoft Visual Studio Version Selectorも管理者権限にしないといけないようだ。
"C:\Program Files\Common Files\microsoft shared\MSEnv\VSLauncher.exe"
も管理者権限で動作するようにしたら、無事起動するようになった。
2008年06月09日
ノートPCのバッテリー壊れた
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になってしまったので、そのまま
「では、宜しくお願いします」
で、電話を切ってしまった。
電話が来た翌日には、新しいバッテリーが家に届いていました。
すばやい対応だったので、良しとしよう。
でも、交換できるのを知らずに、バッテリーを買い換えた人も多いんだろうな?
バッテリーランプも緑からオレンジに変わっているし、どうもバッテリーパックが壊れたようだ。
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になってしまったので、そのまま
「では、宜しくお願いします」
で、電話を切ってしまった。
電話が来た翌日には、新しいバッテリーが家に届いていました。
すばやい対応だったので、良しとしよう。
でも、交換できるのを知らずに、バッテリーを買い換えた人も多いんだろうな?