C#4のオプションのパラメーターと名前付き引数

画像 これは、VS 2010および.NET 4のリリースに特化したシリーズの 17番目の記事です。



本日の投稿では、C#4.0で追加された新しい言語機能のトピック-オプションのパラメーターと名前付き引数、およびASP.NET MVC 2でオプションのパラメーターを使用するクールな方法について説明します。



オプションのパラメーター



C#4.0は、メソッド、コンストラクター、およびインデクサーでオプションのパラメーターをサポートします(VBはこれをかなり前に知っていました)。



デフォルト値が宣言に存在する場合、パラメーターはオプションです。 たとえば、以下は2つのパラメーターをとるメソッドです:文字列パラメーター「category」と整数「pageIndex」。 「pageIndex」パラメーターのデフォルト値は0であるため、オプションのパラメーターです。



image



上記のメソッドを呼び出すと、2つのパラメーターを明示的に渡すことができます。



image



または、2番目のオプションパラメータを省略します。この場合、デフォルト値0が渡されます。



image



VS 2010のIntelliSenseは、パラメーターがオプションであり、デフォルト値であることを示していることに注意してください。



image



C#4.0の名前付き引数とオプションのパラメーター



C#4.0は、名前付きパラメーターの概念もサポートしています。 これにより、位置で識別するのではなく、メソッドに渡されるパラメーターの名前を明示的に指定できます。



たとえば、 GetProductsByCategoryメソッドの2番目の引数を名前で明示的に定義して、次のようなコードを作成できます。



image



名前付き引数は、メソッドがいくつかのオプションのパラメーターをサポートし、どの引数を渡すかを明示的に指定したい場合に便利です。 たとえば、次の2つのオプションパラメータを取るDoSomethingメソッドがあります。



image



名前付き引数を使用して、次のいずれかの方法でメソッドを呼び出すことができます。



image



両方のパラメーターはオプションであり、1つまたはゼロの引数が指定されている場合、指定されていない引数のデフォルト値が渡されます。



ASP.NET MVC 2およびオプションのパラメーター



ASP.NET MVC 2のオプションパラメーターを使用してコントローラークラスのアクションメソッドと通信できる興味深いシナリオを見てみましょう。



たとえば、「Products / Browse / Beverages」や「Products / Browse / Deserts」などのURLをコントローラーアクションメソッドにバインドします。 これを実装するには、URLをメソッドに関連付けるURLルーターを作成します。



image



クエリ文字列「ページ」のオプションパラメータの値を使用することも、無視して、ページごとに結果を表示するBrowseメソッドの結果を表示することもできます。 たとえば、/ Products / Browse / Beverages?Page = 2。



ASP.NET MVC 1では、通常どおり、「page」パラメーターをアクションメソッドに追加し、nullに設定してこのスクリプトを処理しました(「page」パラメーターがクエリ文字列に存在しない場合、nullが渡されます)。 次に、nullをintに変換し、クエリ文字列に渡されなかった場合はデフォルト値に割り当てるコードを作成できます。



image



ASP.NET MVC 2では、VBおよびC#でサポートされているオプションのパラメーターを使用して、より簡潔で明確な実装を実現できます。 アクションメソッドパラメータをデフォルト値でオプションとして宣言するだけで十分です。



C#



image



Vb



image



クエリ文字列に値「ページ」が存在する場合(/製品/閲覧/飲料?ページ= 22)、それは整数としてアクションメソッドに渡されます。 「ページ」値がクエリ行にない場合(/製品/閲覧/飲料)、デフォルト値0がアクションメソッドに渡されるため、コードが少し簡潔で読みやすくなります。



まとめ



C#およびVBには、かなりの数の新機能があります。 上記の2つはほんの一部です。



C#(C#4.0を含む)のすべての新機能の説明、および.NETクラスのコアライブラリの説明を含む良い本を探している場合は、最近リリースされたO'Reillyの本 " C#4.0 in a Nutshell



image



All Articles