0

文字列入力がnullまたは空かどうかをチェックするメソッドへの一連の呼び出しを含むメソッドがあります。空の場合、2番目のパラメーターをfalseに設定します。

public bool inputsContainData()
{
    bool validInputs = True;

    _helper.StringContainsData(_view.FilePath1, validInputs);
    _helper.StringContainsData(_view.FilePath2, validInputs);

    //...

    Return validInputs;
}

StringContainsData()メソッドは、プレゼンターにDIされるクラスにあります。結果変数は参照型であるため、メソッドは何も返しません。

public void StringContainsData(string input, bool result)
{
    if( string.IsNullOrEmpty(input))
    {
        result = false;
    }
}

StringContainsData()をモックして特定の結果を返すことができないため、これにいくつかの問題があります。私が考えることができる唯一の解決策は、次のように2番目のIfステートメントを含めるかどうかです。

    public bool StringContainsData(string input, bool result)
    {
        if( string.IsNullOrEmpty(input))
        {
            if(result != false)
            {
                return false;
            }
        }
        else
        {
            if(result == false)
            {
                return false;
            }
        }
        return true;
    }

したがって、True、False、True=>最終結果=falseではなくtrueになるのを防ぎます。

これを行うためのより良い方法はありますか?

4

2 に答える 2

2

bool値型です。これは、値が参照ではなくメソッドに渡されることを意味します。

2つのオプションがあり、次のようなboolメソッドから結果を返すことができます。StringContainsData

public bool StringContainsData(string input, bool result)
{
    return string.IsNullOrEmpty(input);
}

または、ref/を使用することもできますが、outこれはおそらく必要なものではありません。

于 2012-09-03T14:19:44.893 に答える
1

最も簡単なのは、呼び出しを連鎖させるために再構築することです。

前の回答と新しい回答を単純にANDで処理する場合は、別の回答は必要ありません。

public bool StringContainsData(string aString, bool answerToDate) {
    return answerToDate && !string.IsNullOrWhiteSpace(aString);
}

public bool inputsContainData() {        
    bool validInputs = True;        

    validInputs = _helper.StringContainsData(_view.FilePath1, validInputs);        
    validInputs = _helper.StringContainsData(_view.FilePath2, validInputs);        

    return validInputs;        
}        

またはあなたがいくつかの楽しみを持ちたい場合

public bool inputsContainData() {        
    var inputs = new []{ _view.FilePath1, _view.FilePath2};
    return inputs.Aggregate(true, (ret, inp) => ret && !string.IsNullOrWhiteSpace(inp));        
}  

ノート:

最後のバージョンはそれ自体が複雑に見えますが、ファイルパスを追加して配列の拡張を確認する場合は、割り当て/呼び出し行の切り取り/貼り付けよりも簡単/安全です。

関数では、最初に短絡(&&)を使用してretをチェックすることは、すでに失敗している場合に現在の入力をチェックする必要がないことを意味します。

于 2012-09-03T14:55:19.927 に答える