你能传递一个类型并强制执行C#中传递的类型吗?

时间:2012-08-26 05:15:17

标签: c# types

我设置了一个方法来传递一个类型作为参数

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

是否有办法强制执行该类型,以便您只能传递从特定基类继承的类型?

2 个答案:

答案 0 :(得分:7)

尝试使您的函数具有通用性,并通过泛型类型参数传递type参数:

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

您可以使用列出here列出的任何类型约束。

如果它必须处理任意类型的对象(例如,当你无法控制谁调用该函数时),那么你可能只需要使用运行时断言:

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

请参阅Type Restriction上的这个问题。

答案 1 :(得分: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