【发布时间】:2010-09-15 11:14:18
【问题描述】:
我不认为这是可能的,但这里是......
我想添加可以处理 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>()
}
显然这行不通我并不完全愚蠢,但我对泛型并不那么热 - 有人可以确认这是不可能的:-) ..?在您看来,实现这种效果的最优雅的方式是什么..?
【问题讨论】:
-
正如 Jon 所指出的,这不是 C# 或 CLR 类型系统的特性。如果您对这种类型系统感兴趣,请考虑阅读 Haskell 中更高级别的类型。
-
@Eric - 谢谢 - 我刚开始研究 Haskell,看起来是一门非常有趣的语言。
标签: c# .net nhibernate generics