4

すべて、私がしなければならないのは:

文字列が有効な列挙型要素であるかどうかを確認し、有効な場合はステータスを返します。

たとえば、列挙型がEnum_Testである場合、その値は赤、青、緑で構成されます。

さて、青が検証される要素である場合、私は次のようなものを使用します

Enum_Test evalue;
if(Enum.TryParse(string_Verify, true, out evalue))  
{
        return true;
}

または、別のオプションがあります。

if( Enum.IsDefined(typeof(Enum_Test), string_Verify))
{
        return true;
}

上記の方法の利点と落とし穴は何ですか?

4

3 に答える 3

11

最初の方法の利点:大文字と小文字を区別しません:を取得blueし、列挙型メンバーがあればBlue、すべて問題ありません。

2番目の方法の利点:自己文書化:実際には解析したくない、指定された名前で定義された列挙値があるかどうかを確認したい。したがって、2番目のケースでは、メソッドの名前が意図にさらに一致します。

とはいえ、両方の利点が必要な場合は、最初のメソッドを使用して、名前の付いたメソッドにカプセル化します(例IsEnumDefinedIgnoreCase)。

于 2013-02-04T09:36:43.017 に答える
8

また、TryParseメソッドに数値を含む文字列(「123」など)を渡すと、trueが返されることに注意してください。

于 2015-07-27T07:18:57.183 に答える
1

最初のケースでは、解析が成功すると、で列挙値が取得されevalueます。trueまた、ignore caseパラメータを渡しているため、比較では文字列の大文字と小文字が無視されます。あなたが今それを持っているように、それは成功して戻りtrue、の値を捨てるでしょうevalue

2番目のコードでは、列挙型が定義されているかどうかのみをチェックしています。

于 2013-02-04T09:35:47.040 に答える