2017-05-29 7 views
-2

存在しない場合は、各要素を使用して配列の検証を行います。しかし、「含まれていなければ」期待通りに働かない。下のgif画像を見てください。どのようにして正しく検証できますか?ここで、if文をstring.Contains()で使用するにはどうすればよいですか?

var PartnerTypeName = 
    pageVm 
     .Form1 
     .PartnerTypeName 
     .Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries) 
     .Distinct(); 

if ((PartnerTypeName.Any("PSUD".Contains) 
     || PartnerTypeName.Any("PDST".Contains) 
     || PartnerTypeName.Any("PDLR".Contains)) 
    && (!PartnerTypeName.Any("SERP".Contains) 
     || !PartnerTypeName.Any("Contractors".Contains))) 
{ 
    /*here the logic*/ 
} 
+2

テキストとしてコードを投稿してください。画像のコードは検索エンジンでコピー/貼り付けやインデックス登録することはできません。 – wkl

答えて

2

PartnerTypeName.Any("PSUD".Contains)という行は、期待したことをしていない可能性があります。このスニペットでは、文字列インスタンス"PSUD"Containsメソッドを述語としてAnyメソッドに渡しています。 これは、配列の各文字列が、その特定の文字列の文字列に渡されることを意味します。この場合、配列にたとえば"U"または"SU"が含まれている場合、Anyがtrueになります。もちろん、私は間違っている可能性があり、これは意図的な動作です。

しかし、これがロジックが機能していない主な理由ではありません。これは、最後の!SERP || !Contracters&&であるためです。つまり、いずれかが配列内にある場合、評価を真にしたくないと仮定します。 ! || !と言うと、両方の値はif評価をtrueにするために配列内になければなりません。

まったく、配列の内容を見ると、私は個人的にはHashSetを使用します(正確に一致させることを前提としています)。これにより、「別個の」値が作成され、値が存在するかどうかを確認するための使いやすいコレクションが作成されます。擬似コード:

var PartnerTypeName = new HashSet<string>(new string[]{"PSUD", "ABCD", "SERP", "PSUD"}); 

if (new string[]{"PSUD","PDST","PDLR"}.Any(PartnerTypeName.Contains) && !new string[]{"SERP","Contractors"}.Any(PartnerTypeName.Contains)) 
{    

} 
0

使用しているif文を確認する必要があります。右側にはない だからそれは& &でなければならない||
あなたがやっていることは、リストに含まれていないものの1つが合格する場合ですが、リストにない両方が必要だと思います。

0

これはローカルで試してみました。 あなたの状況が正しいことを確認してください。

List<string> myObjects = new List<string>(); 
myObjects.Add("SERP"); 
myObjects.Add("PSUD"); 

    if (!myObjects.Contains("SERP")) 
    { 

    } 
    else 
    { 

    } 
0

これは簡単にデバッグを可能にし、あなたの条件が間違っていたり、何か他のものあるかどうかを判断するのに役立ちます方法にこれを抽出し、この

public bool IsSomeType(string[] partnerTypeNames) 
{ 
    if ((NameOfYourPositiveCase(partnerTypeNames) 
    && (NameOfYourNegativeCase(partnerTypeNames)) 
    { 
     /*here the logic*/ 
    } 
} 

public bool NameOfYourPositiveCase(string[] partnerTypeNames) { 
    return ((partnerTypeNames.Any("PSUD".Contains) 
     || partnerTypeNames.Any("PDST".Contains) 
     || partnerTypeNames.Any("PDLR".Contains)); 
} 

public bool NameOfYourNegativeCase(string[] partnerTypeNames) { 
    return !partnerTypeNames.Any("SERP".Contains) 
      || !partnerTypeNames.Any("Contractors".Contains); 
} 

などの異なるシナリオのためのユニットテストを追加することを検討してくださいあなたを騙している。

私はこれで問題は解決しないが、原因を特定するのに役立つかもしれないことにご注意ください。

関連する問題