0

2 つの Vector が等しいかどうかをテストまたは比較したいとします。

次のものがあるとします。

string[] models = {"ModelOne", "ModelTwo", "ModeThree"};

そして、その中に何が入っているかはわかりませんが、上記のモデルの所有者と同じ要素が含まれていると信じている別のものです。

この検証を行うためのこの方法があり、上記のベクトルを渡す単体テストで使用しmodelsます。

public bool TemplateForDependenciesTests (string[] v)
{
    var dependency = new Dependencies();
    var result = dependency.GetByReferencedModel(typeof(T).ToString());

    //foreach (var i in result)
    //{
        //if ((v.Any(model => model == i.ReferencingModelName)))
    //return false;
    //}

    return result.Any(x => (v.Any(model => model == x.ReferencingModelName)));
}

結果変数は、このメソッドの戻り値を保持します:

public IEnumerable<Dependency> GetByReferencedModel(string referencedModelName)
{
    return this.dependencies
        .Where(d => d.ReferencedModelName == referencedModelName);
}

問題は、return ステートメントを適切に動作させるにはどうすればよいかTemplateForDependenciesTests()、実際に期待どおりに動作していることをスヌープできるようにするにはどうすればよいかということです。

4

2 に答える 2

2

のメンバーがコレクションにresultある を持っているかどうかを確認しようとしているようです。これはそれを行うようです:ReferencingModelNamemodels

return result.Select(x => x.ReferencingModelName).Intersect(v).Any();

ここで、実際に期待どおりに動作しているかどうかを確認するためにスヌープする場合は、次のようにします。

var intersection = result.Select(x => x.ReferencingModelName).Intersect(v).ToList();
// now you can examine the contents of the intersection list
// and you can return the result
return intersection.Any();

さらに一歩進むこともできます。

var result = dependency.GetByReferencedModel(typeof(T).ToString()).ToList();
var names = result.Select(x => x.ReferencingModelName).ToList();
var intersection = names.Intersect(v).ToList();
return intersection.Any();

これにより、各ステップの結果を調べることができ、エラーが存在する場所を確認できるはずです。

には順序は関係ありませんIntersect。それはあなたが持っている場合です:

var x = new string["a", "b", "c"];
var y = new string["c", "b"];
var z = new string["b", "c"];

その後x.Intersect(y) == y.Intersect(x) == x.Intersect(z) == y.Intersect(z)、など。

于 2013-10-28T18:53:00.127 に答える
0

複数行のステートメントにすることで、ラムダをデバッグしやすくすることができます。たとえば、何が起こっているかを正確に確認するために、この全体にブレークポイントを配置できます。

var resultList = result.ToList();
return resultList.Any(x =>
{
    bool outer = v.Any(model =>
    {
        bool inner = model == x.ReferencingModelName;
        return inner;
    });
    return outer;
});

ToLookupまた、またはToDictionary、 、 などを使用するとHashSet<T>、これらすべてのルックアップをより高速に、より直感的にコーディングできることにも注意してください。

于 2013-10-28T18:30:07.900 に答える