atsukanrockのブログ

Microsoft系技術を中心にぼちぼち更新します

LinqのWhereでの列挙中に、列挙を中断できる

IEnumerableを返すためにyield returnを使うコードを、最近になって初めて実践的に使った。するとあることに気付いた。次のコード、yieldに慣れていないとどう動くか予想しづらいのではないか。

int count = 0;
var array = new object[100];
foreach (var obj in array.Where((o) =>
{
    count++;
    return true;
}))
{
    Console.WriteLine(count);
    if (count >= 10)
    {
        break;
    }
}
続きを読む

ASP.NETで「ログイン成功後に新しいセッションを開始」は可能なんだろうか?

はじめに

IPAが、『安全なウェブサイトの作り方』という、Webサイトのセキュリティに関するガイドブックを出している。このPDFの21ページに、「ログイン成功後に、新しくセッションを開始するようにする」という対策がある。この解説の内容は納得できるものだ。しかし、ASP.NETで、うまくこれを実装する方法はあるのだろうか?

続きを読む

Nullableはまあまあ賢い

はじめに

System.Nullable<T>は、まあまあ賢い。まあまあ賢いとはどういうことかというと、予想したとおり動作してくれる。具体的には、

  • nullとの比較
  • ボックス化

が、予想したとおり動作する。

続きを読む

0.00001.ToString()は"1E-05"

標記のとおり、

  • System.Single(C#ではfloat)
  • System.Double(C#ではdouble)

の、ToString()メソッドの戻り値は、値によっては指数表記となる。

ドキュメントにも明記されているのだが、その説明は非常にわかりづらい。おそらく、固定小数点表記と指数表記で、戻り値の文字数がより少なくなる方の表記となるようだ。

SYSとSYSTEMのデフォルトのパスワード

Oracleデータベースを作成する際に、SYSやSYSTEMのパスワードを明示的に指定しないと、

  • SYS:CHANGE_ON_INSTALL
  • SYSTEM:MANAGER

という、デフォルトのパスワードが設定されるらしい。11gでもこの仕様は変わっていないようだ。

ちなみに、パスワードが大文字か小文字かは、マニュアルからははっきりとしない。実験してみる必要がありそうだ。パスワードが大文字化小文字かは、11gからは非常に重要(11gからはデフォルトでcase-sensitiveなため。というか10g以前ではcase-insensitiveにしかできない)なので、マニュアルに明記されていないのは問題だろう…。

古い時代のOracleを触っている人にとっては極めて常識的な知識なのだと思うが、私は初耳だった。DBCAを使ってデータベースを作成している限り、SYSやSYSTEMには必ずパスワードを明示的に指定することになるから。