2017-09-02 6 views
4

メソッドの入力の正当性を検証する方法があるのだろうか?私は簡単に後でこれを行うことができ、エラーを投げることができますが、コンパイル時にうまくいくと思います。代わりにC#メソッドは最大値を持っていますか?すなわち、Size(int x <40、int y <80)?

CursorPosition(int x, int y) 
{ 
if (x >= 80) { Console.WriteLine("off screen"); } 
if (y >= 24) { Console.WriteLine("off screen"); } 
} 

は、私はちょうどそれがここで行われ、コンパイラがバックし、エラーをスロー持っていませんでしたか?

CursorPosition(int x < 80, y < 24) 
{ 
// do stuff 
} 

ありがとうございます!タイプが値に依存しているため、いわゆる -

+2

コード契約を使用することができます。 – Dai

+0

身体に行かずにパラメータを渡すときの状態を確認しますか? –

+0

非常によく似た質問ですが、パラメータが確実にnon-nullであることに重点を置いていますが、[メソッドのパラメータを自動的にテストし、.net/VSのArgumentNullExceptionをスローするツール](https://stackoverflow.com/q/5419408/ 150605) – BACON

答えて

5

したい機能が依存型と呼ばれています。従属型システムは、「80未満の正の整数」または「最初のものが小さい方の整数」、または「整数と配列の長さよりも短い配列」などの概念を表すことができ、そのソート物の

C#では依存型を直接サポートしていません。あなたが得ることができる最も近いのは、コメントに記載されているように、プログラムにコード契約を付けることです。コード契約により、プログラムを静的にチェックして、タイプ違反の可能性があるかどうかを確認し、実行時に契約をチェック・アンド・スローにすることができます。

依存型をサポートする多くの興味深い言語がありますが、そのほとんどは純粋に関数型言語です。

+0

包括的な回答をいただきありがとうございます!コンソールベースの入力ツールのプロジェクトでは、メソッド内で評価するのはかなり簡単ですが、できるはずのような感じでした。詳細を教えていただきありがとうございます。私は、依存型をサポートする言語を調べることを念頭に置いています。私には分からないようです。 – xmael91nt

関連する問題