2007年09月04日

C#3.0:fromや selectは[キーワード]という位置づけなのでしょうか?

  
fromや selectは[キーワード]という位置づけなのでしょうか?

当然、C#2.0では、from、selectは[キーワード]じゃないから、
int from;

といった変数を使っているコードを
C#3.0でコンパイルしたときには、エラーにはなってほしくない。
実際、エラーにはならない。

だから、
 int from = 10;  // 変数の from
Console.WriteLine(from.ToString());
var list = from c in objs
where c.Name == "XXX"
select c.Name;

というコードが書ける。
LINQとしての selectなのかそうではないのか、文脈をみて判断することになる。コンパイラを作る側も大変だろうけど、エディタ側も大変そう。

さすがに、以下のコードはエラーになるみたい。

    int[] select = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var numsPlusOne =
from n in select
select n + 1;

まあ、こんなコード書く人いないだろうから、エラーになっても問題はないけどね。

「C# Language Specification Version 3.0」を見てみたけど、fromや selectは[キーワード]じゃなかった。


このことに気がついた時に、Delphi(Object Pascal)のときも同じことがあったなーって、思い出した。
Delphiでは、for や if は予約語でしたけど、abstract, virtual, readonly とかは予約語じゃなくて、別の指令語(正確な名前は忘れた)とかいう分類だったと思う。
integerというのも予約語じゃない。
なので、
   var
integer:double; // integerという名前の Double型の変数

なんていうわけわかんない変数宣言ができた。
コンパイラー屋さんも、過去との完全互換を取るためにいろんな苦労をしてるんだなー。


この記事へのコメント
コンテキストキーワードってやつですか。
Posted by シャノン at 2007年09月07日 13:40
どうもありがとうございます。
コンテキストキーワードですね。¢(. .。)メモメモ

コンテキストキーワードって、C#2.0からあったんですね。
うかつだった...

Posted by Gushwell at 2007年09月07日 20:17
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51104671