簡體   English   中英

多重測試包含字符串的更好方法

[英]better way to multiple test what contains a string

我目前正在與文化信息合作,需要翻譯一些單詞。 這幾天,我用這個:

--> 輸入 : array DayDetails : [MO,TU, WE, TH, FR][MO, WE,TH,FR,SA] ...

 if ( daysDetails.Length == 7 )
    {
       return langSpec.GetLocalMessage( "every" ) + " " + langSpec.GetLocalMessage( "Days" );
    }
    else if( daysDetails.Length == 5 && daysDetails.Contains( "MO" ) && daysDetails.Contains( "TU" ) && daysDetails.Contains( "WE" ) && daysDetails.Contains( "TH" ) && daysDetails.Contains( "FR" ) )
    {
       return langSpec.GetLocalMessage( "workingDays" );
    }

輸出:一個string :星期一、星期四、星期三

如果有 5 天,這是我想要的工作日:一個string :工作日

如果我想要 7 天:一個帶有“每一天”的string

問題是,我不喜歡我的第二個 if 看起來如何,但我必須測試,在 5 天的情況下,這些天是正確翻譯它的​​工作日。

除了多個 && 之外,有沒有更好的方法來寫這個?

抱歉我的英語不好,希望你能理解。

編輯:DayDetails 也可以是 [MO,TH] 或 [MO] 或 [FR,WE,TH,TU,MO],因為它是我從其他地方得到的響應,我無法掌握輸入。

編輯 2:我檢查了比較兩個 List<T> 對象是否相等,忽略順序,因為多人建議它,但它並沒有真正回答我的問題。 給出的答案比我最初的帶有 5 個語句的“if”要復雜得多。

創建一個數組並使用 All:

    private static readonly List<string> workdays = new List<string>() { "MO", "TU", "WE", "TH", "FR" };
    private static bool isWorkday(string[] daysDetails) => workdays.All(d => daysDetails.Contains(d));

您可以使用Enumerable.SequenceEqual如下:

string[] dayDetails = new [] { "MO", "TU", "WE", "TH", "FR" };

if (daysDetails.Length == 7)
{
   return langSpec.GetLocalMessage( "every" ) + " " + langSpec.GetLocalMessage( "Days" );
}
else if (Enumerable.SequenceEqual(dayDetails, new [] { "MO", "TU", "WE", "TH", "FR" }))
{
   return langSpec.GetLocalMessage( "workingDays" );
}

假設dayDetails將按正確順序排列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM