Nie sądzę, że jest to możliwe, ale tutaj jest ...C# generics - możliwe do stworzenia metody z n Rodzajami rodzajowymi ...?
Chcę dodać metodę, która może obsłużyć n liczbę generycznych. Np
bool<T> MyMethod() where T: Isomething
{
}
działa dla jednego typu
bool<T,K> MyMethod() where T: Isomething
{
}
działa na dwóch rodzajach
istnieje sposób do pracy z n typów - np
bool<T[]> MyMethod() where T: Isomething
{
}
powodem chcę, aby to zrobić jest wdrożenie statycznego NHibernate metody pomocnika, który można załadować z wieloma zespołami - teraz działa świetnie dla jednego zespołu. Mój obecny sposób jest przedstawiony poniżej:
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];
}
Jeżeli linia: m.FluentMappings.AddFromAssemblyOf(), to dodam wiele typów np
foreach(T in T[]){
m.FluentMappings.AddFromAssemblyOf<T>()
}
Oczywiście to nie może pracować nie jestem całkowicie niemy, ale nie jestem tak gorąco na generycznych - może ktoś potwierdzić, że nie jest to możliwe :-) ..? Jaki byłby najbardziej elegancki sposób osiągnięcia tego efektu w twojej opinii ..?
Jak zauważa Jon, nie jest to cecha języka C# ani systemu typu CLR. Jeśli ten rodzaj systemu interesuje cię, rozważ czytanie lepszych typów w Haskell. –
@Eric - dziękuję - właśnie zacząłem patrzeć na Haskella i wygląda na bardzo interesujący język. –