No creo que esto sea posible, pero aquí va ...genéricos C# - posible crear un método con n tipos genéricos ..?
Quiero agregar el método que puede manejar n cantidad de genéricos. por ejemplo:
bool<T> MyMethod() where T: Isomething
{
}
funcionará para un tipo
bool<T,K> MyMethod() where T: Isomething
{
}
va a trabajar para dos tipos
¿Hay una manera de trabajar con n tipos - por ejemplo,
bool<T[]> MyMethod() where T: Isomething
{
}
la razón por la que quiero hacer esto es poner en práctica un método de ayuda nhibernate estática que puede cargar desde múltiples montajes - ahora funciona muy bien para un montaje. Mi método actual es como se muestra a continuación:
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];
}
Donde la línea: m.FluentMappings.AddFromAssemblyOf(), quisiera añadir varios tipos, por ejemplo,
foreach(T in T[]){
m.FluentMappings.AddFromAssemblyOf<T>()
}
Obviamente, esto no podría funcionar no estoy completamente mudo, pero no estoy tan caliente en los genéricos - alguien puede confirmar que esto no es posible :-) ..? ¿Cuál sería la forma más elegante de lograr este efecto en tu opinión ...?
Como señala Jon, esta no es una característica de C# o del sistema de tipo CLR. Si este tipo de sistema de tipo te interesa, considera leer en tipos de rango superior en Haskell. –
@Eric - gracias - Acabo de empezar a mirar a Haskell y parece un lenguaje muy interesante. –