2012-03-11 4 views
2

jsonパラメータとして文字列を受け取り、タイムゾーンIDとみなしています。私はそれを確認したい。は、有効なタイムゾーンを表す文字列です。

これは私が持っているものです。

TheTimezoneID = TheTimezoneID.Trim(); 
var AllTimezones = TimeZoneInfo.GetSystemTimeZones(); 

if (TheTimezoneID "is a valid .net timezone" == true) {} 

TheTimezoneIDがAllTimezonesであるかどうかをテストしますLINQの式は何ですか? .Anyを使ってみましたが、うまくいきません。

ありがとうございました。

+0

あなたがしたいことを伝えることは難しい - 単一の文字列が有効なタイムゾーンを表しているか、文字列がすべて有効なタイムゾーンを表しているかどうかを調べる。タイムゾーンIDのすべての束が* all *有効であるかどうかをテストする場合は、.Anyではなく.Allが必要です。 –

+0

@AdamMihalcin:一度に1つの文字列をチェックするだけです。ユーザーは、ページのドロップダウンからタイムゾーンを選択しています。ドロップダウンに.netの値を設定しますが、私はまだ戻ってチェックしています。 – frenchie

答えて

5

あなたはおそらく使用すべき様々な状況でこれをやろうとしている場合:

private static readonly HashSet<string> AllTimeZoneIds = 
    new HashSet<string>(TimeZoneInfo.GetSystemTimeZones() 
            .Select(tz => tz.Id)); 

次に、あなただけ使用することができます。

if (AllTimeZoneIds.Contains(timeZoneId)) 

を反復処理するためにLINQを使用する必要はありませんハッシュセットが単にO(1)ルックアップを実行できるたびに、全時間帯リスト。

あなただけAnyを使用して興味あれば、それは次のようになります。

if (AllTimeZoneIds.Select(tz => tz.Id).Contains(timeZoneid)) 

または

if (AllTimeZoneIds.Any(tz => tz.Id == timeZoneid)) 

ノート "タイムゾーンIDが" かわいい羊毛概念であること。これにより、有効な.NETタイムゾーンIDかどうかがチェックされます。実際に "ヨーロッパ/ロンドン"のようなタイムゾーンを取得している場合、それは別の問題です。

+0

ok、thanks Jon;できます。 – frenchie

+0

ちょうど興味深いのは、どのような構造のプライベート静的読み取り専用ですHashSet ?それは辞書のようなものですか? – frenchie

+0

@frenchie:キーだけの辞書のようです。 http://msdn.microsoft.com/en-us/library/bb359438.aspx –

関連する問題