3

型をパラメーターとして渡すメソッドを設定しました

private void SomeMethod(System.Type type)
    {
        //some stuff
    }

特定の基本クラスから継承する型のみを渡すことができるように型を強制する方法はありますか?

4

2 に答える 2

8

関数をジェネリックにして、ジェネリック型パラメーターを介して型パラメーターを渡してみてください。

private void SomeMethod<T>() where T : U {
    Type type = typeof(T);
    // some stuff
}

ここにリストされている任意の型制約を使用できます。

任意の型のオブジェクトを処理する必要がある場合 (たとえば、関数を呼び出す人を制御できない場合)、おそらく実行時アサーションを使用する必要があります。

private void SomeMethod(System.Type type)
{
    if(!typeof(U).IsAssignableFrom(type)) {
        throw new ArgumentException("type must extend U!");
}

Type Restriction に関するこの質問も参照してください。

于 2012-08-26T05:27:32.957 に答える
3

多くの可能性があります...

インスタンスベース:

private void SomeMethod(object list) // total generic

になる

private void SomeMethod(IEnumerable<object> list) // enumerable-generic

また

private void SomeMethod(List<object> list) // explicit list

OR 汎用関数:

private void SomeMethod<T>() where T : MyType // << contraints
{
    var theType = typeof(T);
}

それを呼び出します:

var xyz = SomeClass.SomeMethod<string>(); // for example

制約の詳細については、http: //msdn.microsoft.com/en-us/library/d5x73970 (v=vs.80).aspx を参照してください。

于 2012-08-26T05:21:03.967 に答える