2009-08-01 11 views
9
私は Moqのためにソースコードを読んでいると私は、次のユニットテストに出くわした

C#では()=>はどういう意味ですか?

Assert.Throws<ArgumentOutOfRangeException>(() => Times.AtLeast(0)); 

そして、私の人生のために、私は()=>が実際に何をするか覚えていないことができます。私はそれが匿名の方法やラムダと関係があると思います。そして、私は誰かが私に速いを与えることができgoogle isn't being much helpneither is stackoverflow

....

私はそれは、私は現時点では覚えていないことができないものを知っていると確信しているとさらに悪いことにかなりnoobish質問に答える?

+0

は私を覚えて...ないほとんどの検索ENG ine friendly operator ... –

+0

これが正しく理解されていれば、Times.AtLeast(0)がfalseの場合、例外がスローされることを意味します。私は正しいですか?これは「デバッグ」モードでのみ機能しますか? –

答えて

11

()=>はヌルラムダ式です。 assert.Throwsに渡され、その関数のどこかで呼び出される無名関数を表します。

void DoThisTwice(Action a) { 
    a(); 
    a(); 
} 
Action printHello =() => Console.Write("Hello "); 
DoThisTwice(printHello); 

// prints "Hello Hello " 
+1

したがって、基本的に、ユニットテストコードは、スローされた例外を処理し、正しい例外がスローされたことをアサートするThrowsメソッドによって実行されるメソッドを呼び出す匿名メソッドを作成していますか? – mezoid

+0

はい。 .................... – Jimmy

12

検索StackOverflow "lambda"。

具体的に:「引数を取らず、voidを返し、そしてあなたがそれを呼び出すとき、それはコンソールにメッセージを書き込み方法を」

意味
() => Console.WriteLine("Hi!"); 

あなたはアクション変数に格納することができます

Action a =() => Console.WriteLine("Hi!"); 

をそしてあなたはそれを呼び出すことができます。

a(); 
+0

downvote、または投票の削除の理由は何ですか? –

+0

これは私ではありませんでしたが、おそらく "lambdaの検索スタックオーバーフロー"はOPがlambdaと何か関係があることを知っていたことを認めていると考えるとあまり役に立ちません。しかし、私から+1。 –

+0

最初の答えを展開する前に誰かがそれを落としている可能性があります。あなたの答えを見て、それは間違いなく非常に有用です。 – mezoid

0

私はC#でプログラムをしませんが、「C#のラムダは」this linkを提供するグーグルそれはあなたの質問に答える!

2

これはラムダ(匿名)関数の定義です。基本的には、関数をインラインで定義する方法です.Assert.Throwsは関数を引数として受け取り、それを実行しようとします(そして、それが特定の例外をスローすることを検証します)。

基本的には、Times.AtLeast(0)がArgumentOutOfRangeExceptionをスローするようにするユニットテストがあります。ラムダ関数は、テストのための適切な引数(この場合は0)を渡すために、(Assert.Throwsから直接Times.AtLeast関数を呼び出すのではなく)必要です。

トピックに関するMSDN KBの記事はこちら:http://msdn.microsoft.com/en-us/library/bb882516.aspx

4
() => Times.AtLeast(0) 

()は、ラムダ関数にパラメータまたは戻り値がないことを示します。

=>は、コードブロックが続くことを示します。

Times.AtLeastは(0)0

9

これは、ラムダ式だのパラメータを持つタイムズクラスの静的メソッドを呼び出します少なくとも。最も一般的な構文は、パラメータを使用しているので、それを中心に必要な一切のかっこはありません。

n => Times.AtLeast(n) 

パラメータの数が1以外の場合は、括弧が必要です。

(n, m) => Times.AtLeast(n + m) 

がある場合ゼロのパラメータが、あなたは空のパラメータリストを囲む括弧でやや厄介な構文を取得する:私は「* =」SQLでの情報を探していたとき

() => Times.AtLeast(0) 
+0

ああ... ....それはたくさんの意味があります!ありがとう! – mezoid

関連する問題