1

これは基本的な質問かもしれませんが、ググっても答えが見つかりませんでした。あなたが私を助けてくれることを願っています。私が持っていると考えてくださいenum ContactNumberType

string[] names = Enum.GetNames(typeof(ContactNumberType))

上記を使用すると、コンパイラはエラーを出しませんが、次のように記述します。

string[] names = Enum.GetNames(ContactNumberType)

それは言います:

ContactNumberTypeは型ですが、変数のように使用されます。

私が知る限り、の型は でContactNumberTypeあり、メソッドの引数は を必要としますが、それで何が問題なのですか?EnumGetNamesEnumType

4

3 に答える 3

7

typeofGetNames()メソッドはタイプのパラメーターを受け取るため、使用する必要がありますTypeTypeタイプ名を指定することは、そのタイプの詳細を含むオブジェクトであるのインスタンスと同じではないことに注意してください。

タイプをパラメーターとして渡すには、2つの基本的な選択肢があります。

  • Typeインスタンスを渡す
  • ジェネリックを使用する

これらの最初のもの(などの多くの古いメソッド)では、型識別子からインスタンスEnum.GetNames()を取得する必要があります。これは、演算子を使用して実行できます。Typetypeof()

これらの2つ目は、型名をパラメーターとしてメソッドまたはクラスに渡して、そのメソッドまたはクラスをジェネリックにすることができ、新しいメソッドで使用される傾向があります(ジェネリックは.NET 2.0で導入されました)。

var items = someList.OfType<SomeTypeName>();

Enumただし、GetNames()次のようなものを作成することはできますが、これを可能にする一般的な形式はありません。

public static class EnumHelper
{
    public static string[] GetNames<T>() where T : struct
    {
        return Enum.GetNames(typeof(T))
    }
}

次に、次のように呼び出すことができます。

string[] names = EnumHelper.GetNames<ContactNumberType>();
于 2012-07-18T20:56:52.133 に答える
2

GetNamesタイプのパラメータを取りますType。問題は、それがオブジェクトでContactNumberTypeはないというTypeことです。typeof演算子を使用すると、適切なTypeオブジェクトが返されます。

于 2012-07-18T20:57:32.360 に答える
0

typeof演算子はのオブジェクトを返すためType

于 2012-07-18T20:57:06.570 に答える