通过具体的对象类型作为参数的泛型方法 [英] Pass concrete object type as parameter for generic method

查看:313
本文介绍了通过具体的对象类型作为参数的泛型方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个API使用泛型方法如下

 公共静态类的DataProvider
{
    公共静态布尔DeleteDataObject< T>(GUID UID,的IDbConnection的DbConnection)
    {
        //做的东西在这里
    }

    公共静态的IDbConnection的getConnection()
    {
        //获取连接
    }
}
 

我的应用程序中包含使用codeDOM在运行时生成的类,并且为了保持跟踪我创建了一个名为接口的IDataObject 。我想具体类型的每个对象传递给泛型方法上面如下:

 公共静态布尔PurgeDataObject(这IDataObject的数据对象,UID的Guid)
{
    返回DataProvider.DeleteDataObject< T>(UID,DataProvider.GetConnection());
}
 

数据对象包含由的IDataObject 继承一个类的实例。我感兴趣的是得到该类型,并将其作为 T 。我试图找出是否有可能以某种方式使用动态在这里。 typeof运算()的GetType()并不在<一说工作href="http://stackoverflow.com/questions/2107845/generics-in-c-using-type-of-a-variable-as-parameter">Here

解决方案

我怀疑你想要的东西是这样的:

 公共静态布尔PurgeDataObject(这IDataObject的数据对象,UID的Guid)
{
    返回PurgeDataObjectImpl((动态)数据对象,UID);
}

私有静态布尔PurgeDataObjectImpl&LT; T&GT;(T数据对象,UID的Guid)
    其中T:IDataObject的
{
    返回DataProvider.DeleteDataObject&LT; T&GT;(UID,DataProvider.GetConnection());
}
 

使用数据对象动态,让执行即时编译器来执行类型推断制定 T

您的可以的只是使用反射来自己做,用 MethodInfo.MakeGenericMethod - 但这种方式肯定是少code <。 / P>

I have an API using generic method as follow

public static class DataProvider
{
    public static Boolean DeleteDataObject<T>(Guid uid, IDbConnection dbConnection)
    {
        // Do something here
    }

    public static IDbConnection GetConnection()
    {
        // Get connection
    }
}

My application contains classes generated using CodeDOM at runtime, and in order to keep track of I created an interface called IDataObject. I am trying to pass the concrete type of each object to the generic method above as follow:

public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
    return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}

dataObject contains an instance of a class that inherit from IDataObject. I am interested in getting that type and pass it as T. I am trying to find out if it is possible to somehow use dynamic here. typeof() and GetType() does not work as stated in Here

解决方案

I suspect you want something like this:

public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
    return PurgeDataObjectImpl((dynamic) dataObject, uid);
}

private static Boolean PurgeDataObjectImpl<T>(T dataObject, Guid uid)
    where T : IDataObject
{
    return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}

That uses dataObject dynamically, getting the "execution-time compiler" to perform type inference to work out T.

You could just use reflection to do this yourself, using MethodInfo.MakeGenericMethod - but this way is certainly less code.

这篇关于通过具体的对象类型作为参数的泛型方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆