2007年08月29日

スナップインを初期化できませんでした

   このエントリーをはてなブックマークに追加 Clip to Evernote
コントロールパネル、管理ツールから、「.NET Framework2.0 構成」 を起動すると、

「スナップインを初期化できませんでした」

のエラーがでてしまう。理由は不明。

.NET Framework2.0 を再インストールしようとしたら、すでに新しいバージョンがインストールされているため、インストールを拒否される。

.NET Framework3.5 Beta2 を入れちゃったからな。

しかたないので、

 .NET Framework 3.5 Beta 2

を修復インストールし、その後、

 .NET Framework 3.5 Beta2 日本語 Language Pack

をインストールしてみる。

結果は変わらず (T T).

sfc /scannow としてもダメ。
特に損傷しているファイルは見つからなかった。

どうしたらよいのかわかりません。  

Posted by gushwell at 21:40Comments(0)TrackBack(0)

2007年08月28日

C#3.0:101 LINQ Samples の SelectMany - from Assignment

   このエントリーをはてなブックマークに追加 Clip to Evernote
101 LINQ Samples でまたつまずいた。

以下は、101 LINQ Samples の SelectMany - from Assignment で示されているコード。

public void Linq17() {
List customers = GetCustomerList();

var orders =
from c in customers,
o in c.Orders,
total = o.Total
where total >= 2000.0M
select new {c.CustomerID, o.OrderID, total};

ObjectDumper.Write(orders);
}

でも、

public void Linq17() {
List<Customer> customers = GetCustomerList();

var orders =
from c in customers
from o in c.Orders
let total = o.Total
where total >= 2000.0M
select new { c.CustomerID, o.OrderId, total };

ObjectDumper.Write(orders);
}

だと思う。
この let が分からず悩んだ。
LINQ: .NET 言語統合クエリ
http://www.microsoft.com/japan/msdn/net/bb308959.aspx
の11ページの構文をみてやっとわかった。

---
追記 8/29
Linq17のコードを載せるべきところ、Linq18のコードを載せてしまいましたので、その部分を差し替えました。
  
Posted by gushwell at 19:58Comments(0)TrackBack(0)

2007年08月27日

C#3.0: オブジェクト初期化構文の強化

   このエントリーをはてなブックマークに追加 Clip to Evernote
class Point {
int x;
int y;
public int X {
get { return x; }
set { x = value; }
}
public int Y {
get { return y; }
set { y = value; }
}
public override string ToString() {
return string.Format("X = {0}, Y = {1}", X, Y);
}
}

というクラスがあったときに、

今までだと、

 Point p1 = new Point();
p1.X = 0;
p1.Y = 5;

と、インスタンス生成後に、プロパティに代入する必要があった。

C#3.0では、クラスの初期化構文が強化されて、

 Point p1 = new Point { X = 0, Y = 5 };

と書けるようになった。
もし、Pointに、
 public Point(string name) { ... }

というコンストラクタがあれば、

 Point p1 = new Point("Hoge") { X = 0, Y = 5 };

といった具合になる。
  
Posted by gushwell at 21:25Comments(0)TrackBack(0)

2007年08月25日

C#3.0:101 LINQ Samples

   このエントリーをはてなブックマークに追加 Clip to Evernote
101 LINQ Samplesに載っているサンプルの中に、

SelectMany - Compound from 1
public void Linq14() {
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };

var pairs =
from a in numbersA,
b in numbersB
where a < b
select new {a, b};

Console.WriteLine("Pairs where a < b:");
foreach (var pair in pairs) {
Console.WriteLine("{0} is less than {1}", pair.a, pair.b);
}
}

てのが、あるんですが、
Visual Studio 2008 ベータ2では、

    var pairs =
from a in numbersA
from b in numbersB
where a < b
select new {a, b};

としないと、動きませんね。  
Posted by gushwell at 14:26Comments(0)TrackBack(0)

2007年08月21日

IME2007の速度改善方法

   このエントリーをはてなブックマークに追加 Clip to Evernote
IME2007が遅い件についての改善方法 ― その1 ―
というページを見つけた。
これによれば、4つの Outlook用の辞書を削除すれば早くなるとのこと。
なので、IME2007に戻してみた。

まだ、IME2003と比べると、若干遅いようにも思うが、それほど気になる遅さではない。しばらく、これで様子をみよう。

学習機能を OFFにすれば、さらに早くなるようだが、もう少し学習させてからのほうが良いだろう。
  
Posted by gushwell at 21:46Comments(0)TrackBack(0)

2007年08月20日

preタグで横幅に合わせて折り返す

   このエントリーをはてなブックマークに追加 Clip to Evernote
元ねた 「pre でも改行を生かしたまま折り返す

pre {
white-space: -moz-pre-wrap; /* Mozilla */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
}

へー、こんな指定があったんだ。これで、pre タグで、HTMLのレイアウトが崩れることがなくなる。
早速、CSSを変更しよう  
Posted by gushwell at 23:05Comments(0)TrackBack(0)

2007年08月17日

C#3.0:ラムダ式

   このエントリーをはてなブックマークに追加 Clip to Evernote
ラムダ式

delegate int MyFunction(int i);

static int Triple(int n) {
return n * 3;
}

static void Test() {
// C#1.1
MyFunction f = new MyFunction(Triple);
int n = f(11);
Console.WriteLine(n);
}

このコードは、delegateの動きを説明した C#1.1のコード。

これが、C#2.0になると、こんな書き方になる。

delegate int MyFunction(int i);

static void Test() {
// C#2.0 匿名メソッド
MyFunction f3 = delegate(int x) { return x * 3; };
n = f3(20);
Console.WriteLine(n);
}

わざわざ Tripleというメソッドを定義する必要がなくなったわけだ。

そして、C#3.0では、

delegate int MyFunction(int i);

static void Ramda() {
// C#3.0 ラムダ式
MyFunction f4 = (int x) => { return x * 3; }; // (*)
n = f4(30);
Console.WriteLine(n);
}

ここまでは、C#2.0 と C#3.0 では、記述方法が変化しただけと見ることもできる。
さらに、

    MyFunction f4 = (int x) => return x * 3;    // (*)

と書ける。さらに、この(*)の記述が、

    MyFunction f4 = (int x) => x * 3;

    MyFunction f4 = (x) => x * 3;

    MyFunction f4 = x => x * 3;

と短くすることができる。

いきなり、最後の文を見せられたときは、いきなり出てきた xって何だ?
と面食らったけど、順番に見ていけば、それほど難しくはない。
でも、慣れるのが大変そう。
  
Posted by gushwell at 20:54Comments(0)TrackBack(2)

2007年08月16日

C#3.0:拡張メソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
C#3.0:拡張メソッド

例えば、単語の先頭を大文字に変換する ToTitleCaseメソッドを作成したいという要求があったとします。
そういう場合は、StringUtilsとかいうクラスを作成し、そこに、staticメソッドを用意するのが、一般的でした。
しかし、System.Stringクラスに追加できれば、もっと使い勝手が良くなります。C#3.0では、拡張メソッドを使うことで、
string s = "microsoft";
Console.WriteLine(s.ToTitleCase());

という記述が可能になります。
ToTitleCase 側は、以下のようなコードになります。

static class StringExtensions {
public static string ToTitleCase(this string s) {
var cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
var textInfo = cultureInfo.TextInfo;
return s = textInfo.ToTitleCase(s);
}
}

拡張メソッドにするには、staticメソッドにすること、最初の引数は、this指定することが必要です。
ようは、コンパイラが、
Console.WriteLine(s.ToTitleCase());

というコードを
Console.WriteLine(StringExtensions.ToTitleCase(s));

に置き換えてくれるわけですね。

もちろん、引数を取るメソッドやジェネリックメソッドを拡張メソッドとして定義することもできます。

  
Posted by gushwell at 21:47Comments(0)TrackBack(0)