9

VS2010に標準で付属しているコードコントラクトライブラリについて学び始めたところです。私がすぐに遭遇していることの1つは、契約条項のいくつかが実際に何を意味しているのかということです。

たとえば、これら2つのステートメントはどのように異なりますか?

Contract.Requires(!mycollection.Any(a => a.ID == newID));
Contract.Requires(!Contract.Exists(mycollection, a => a.ID == newID));

言い換えれば、Contract.Existsは、私の関数を使用する開発者にとって、または静的コード分析システムのために、実際の目的で何をしますか?

4

2 に答える 2

4

を使用するバージョンはContract.Exists、その宣言的な性質のために優先されます。もう1つの利点は、フレームワークがこのコントラクトを認識しており、静的分析で「捕捉」される可能性が高いことです。

于 2010-05-06T22:04:30.330 に答える
1

わかりました、私は答えを見つけました。コード契約ユーザーマニュアル、セクション2.7.2によると:

「Contract.Existsの代わりに拡張メソッドSystem.Linq.Enumerable.Anyを使用することもできます。」

したがって、それらは同等です。Existsの代わりにAnyを使用するので、残りのコードと一貫性があります。

于 2010-05-07T16:41:05.783 に答える