C# generics - 可以创建具有 n 个泛型类型的方法..?

标签 c# .net nhibernate generics

我不认为这是可能的,但这里...

我想添加可以处理 n 个泛型的方法。例如:

bool<T> MyMethod() where T: Isomething
{
}

适用于一种类型

bool<T,K> MyMethod() where T: Isomething
{
}

适用于两种类型

有没有办法处理 n 种类型 - 例如

bool<T[]> MyMethod() where T: Isomething
{
}

我想这样做的原因是实现一个静态 nhibernate 辅助方法,它可以从多个程序集加载 - 现在它对一个程序集非常有用。我目前的方法如下图:

        public static ISessionFactory GetMySqlSessionFactory<T>(string connectionString, bool BuildSchema)
    {
        //configuring is meant to be costly so just do it once for each db and store statically
        if (!AllFactories.ContainsKey(connectionString))
        {
            var configuration =
            Fluently.Configure()
            .Database(MySQLConfiguration.Standard
                      .ConnectionString(connectionString)
                      .ShowSql() //for development/debug only..
                      .UseOuterJoin()
                      .QuerySubstitutions("true 1, false 0, yes 'Y', no 'N'"))
            .Mappings(m =>
                      {
                          m.FluentMappings.AddFromAssemblyOf<T>();
                          m.AutoMappings.Add(AutoMap.AssemblyOf<T>().Conventions.Add<CascadeAll>);
                      })
            .ExposeConfiguration(cfg =>
                                 {
                                     new SchemaExport(cfg)
                                     .Create(BuildSchema, BuildSchema);
                                 });
            AllFactories[connectionString] = configuration.BuildSessionFactory();
        }

        return AllFactories[connectionString];
    }

行:m.FluentMappings.AddFromAssemblyOf(),我想添加多种类型,例如

foreach(T in T[]){
   m.FluentMappings.AddFromAssemblyOf<T>()

显然这行不通我不是完全愚蠢但我对泛型不是那么热 - 有人可以确认这是不可能的 :-) ..?在您看来,实现这种效果的最优雅方式是什么......?

最佳答案

否 - 泛型类型和方法的数量在每个类型/方法的基础上是固定的。

这就是为什么有所有不同的 Action<...> , Func<...>Tuple<...>框架中的类型。

偶尔这是一种耻辱,但它相对很少妨碍,而且我怀疑各种事情都会因变量 arity 而复杂得多。

关于C# generics - 可以创建具有 n 个泛型类型的方法..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3717049/

相关文章:

c# - 添加到 ObjectSet<TEntity> 的对象的多态移除不会引发 ObjectSet<TEntity>.IListSource.GetList() 上的 IBindingList.ListChanged

.net - NHibernate ISession Flush : Where and when to use it, 以及为什么?

c# - UriHelper 如何获取生产 url 路径

c# - SELECT2 4.0 在 ASP.Net : How to get and set selected items? 中进行多选

c# - 如何从应用程序中删除(32 位) - 以任务管理器结尾

c# - Directory.Delete()/.Create() 是同步的吗?

c# - 删除指定路径下的所有空目录

c# - 在 ASP.NET 中将事件冒泡到父级

nhibernate - 在哪里可以找到 NHibernate Jet 驱动程序

c# - 两个表的 Fluent Nhibernate 映射一对多在映射中使用唯一而不是主键