Il semble que c # ne supporte pas le c ++ comme les templates. Par exemple
template <class myType>
myType GetMax (myType a, myType b) {
return (a>b?a:b);
}
Je veux que ma fonction ait un type de retour basé sur ses paramètres, comment puis-je l'obtenir en c #? Comment utiliser des modèles en C #
EDIT: Puis-je utiliser object et getType dans le même but?
Les modèles les plus proches de C++ dans C # sont les génériques - mais ils ne sont pas très proches. En particulier, vous ne pouvez pas utiliser d'opérateurs tels que >
entre les valeurs de type génériques, car le compilateur ne les connaît pas (et vous ne pouvez pas contraindre les types basés sur des opérateurs). Par contre, vous pouvez écrire:
public T GetMax<T>(T lhs, T rhs)
{
return Comparer<T>.Default.Compare(lhs, rhs) > 0 ? lhs : rhs;
}
ou
public T GetMax<T>(T lhs, T rhs) where T : IComparable<T>
{
return lhs.CompareTo(rhs) > 0 ? lhs : rhs;
}
Notez que le premier d'entre eux est null-safe; le second ne l'est pas.
Une description complète des génériques va bien au-delà de la portée d'une réponse Stack Overflow; MSDN a des informations, ou consultez votre livre C # préféré.
Les génériques en C # ne sont pas aussi puissants que les modèles en C++. Ce que vous voulez faire ne fonctionne pas en C #.
Un hack/solution de contournement pour votre situation est
public T GetMax<T>(T a, T b) where T: IComparable {
if(a.CompareTo(b) > 0) {
return a;
}
return b;
}
Vous utilisez les génériques en C # pour obtenir des fonctionnalités similaires à celles des modèles.
http://msdn.Microsoft.com/en-us/library/ms379564(VS.80).aspx
public class MyType<T>
{
}
Vous aurez envie de regarder génériques . Syntaxe:
public T GetMax<T>(T a, T b) {
return (a>b?a:b);
}
UPDATE à cause de certains commentaires ... Je voulais juste vous donner un aperçu très rapide. Oui, je suppose que cela ne compile pas ou ne fonctionne pas correctement. Mais c’est là l’idée de base sur ce à quoi cela ressemblerait. Vous trouverez des réponses plus complètes sur ce sujet - en attendant.
Syntaxe d'exécution:
int a = 5;
int b = 10;
int result = GetMax(a, b);
J'espère que cela t'aides,
Cordialement, Thomas
Votre code deviendrait quelque chose comme ceci:
public T GetMax<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) > 0 ? a : b;
}
Tu veux dire quelque chose comme ca
public static IEnumerable<TResult> SelectIfNotNull<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
if (source == null) return null;
return source.Select(selector);
}
Génériques!
class MyClass<T> where T : IEnumerable (any parent class here!)
{
T myGeneric {get; set;}
}