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!");
}

另请参阅有关类型限制的这个问题。

于 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

或具有通用功能:

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 回答