あなたの質問は少し不明確です。あなたのメソッドは、整数として解析可能であるはずの文字列を受け取り、そのような解析の数値結果を使って何かを行うと言っていますか?
メソッドに多数の無効な文字列がフィードされる可能性が低く、無効な文字列を受け取った場合にルーチンが実行できる有用なことが何もない場合は、無効な文字列がメソッドが十分に複雑な解析を実行し、呼び出し元がルーチンが解析するのと同じくらい多くの作業を行わずに文字列を十分に検証できなかった場合、ルーチンはすべての適切な文字列をバッチで処理することが期待されます良い文字列と悪い文字列が混在している場合、一般的なパターンは、のスタイルでメソッドを公開することですbool TryParse(string st, ref int result)
。個人的には、解析が失敗した理由を示すメカニズムがないため、このパターンは好きではありません。別のパターンをお勧めします-これらのいずれかのようなもの:
int TryParse(string st、out ParseStatus status);
int TryParse(string st、Action <ParseStatus> failureAction);
void ActionRV <RefT、ValT>(ref RefT refparam、ValT valparam);を委任します。
int TryParse <RefPT>(string st、ActionRV <RefT、ParseStatus> FailureAction、
ref RefT refParam);
これらの3つの呼び出しパターンすべてで、が継承可能なタイプである場合、障害を正確に説明するインスタンスまたは派生タイプを提供ParseStatus
することが可能になります。2番目と3番目のパターンの場合、デリゲートは例外自体をスローするか、呼び出し元の関数に返される値を格納するか、元のパラメーター文字列を変更して(に格納されている場合)、 「再試行」を要求するフラグ。どちらかが機能する場合は、クロージャーよりもパラメーターを優先する必要があると思うので、個人的には3番目の形式が好きです。2番目の形式は、3番目の形式で効率的に実装できることに注意してください。TryParse
ParseStatus
ParseStatus
ParseStatus
ref
static ExecAction <T>(T param、ref Action <T> proc)
{{
proc(param);
}
int TryParse(string st、Action <ParseStatus> failureAction)
{{
TryParse(st、ExecAction、ref failureAction);
}
refパラメーターとしてasを渡すことfailureAction
は、クロージャを使用する代わりに、ラッパー関数に静的デリゲートを使用できることを意味することに注意してください。