J'ai une classe C# wraper avec une série de méthodes acceptant différents types de données:Déterminer à l'exécution si une distribution est autorisée (C#)
public class MyClass
{
public void ProcessString(string Value) { // implementation }
public void ProcessInt(int? Value) { // implementation }\
public void ProcessOther(MyClass Value) { // implementation }
}
Je veux maintenant ajouter une méthode ProcessObject()
générique pour éviter la nécessité de jeter explicitement un objet avant d'appeler une méthode de processus pertinent:
public void ProcessObject(object Value)
{
if (CanCastToString(Value)
{
ProcessString((string)Value);
}
else if (CanCastToInt(Value))
{
ProcessInt((int?)Value);
}
// etc...
}
Le problème est que je ne sais pas ce que mes CanCastToInt
méthodes devraient être - je besoin de ces méthodes pour pouvoir être robuste et faire face à des choses comme types nullable et autre ca défini par l'utilisateur sts
Comment est-ce que je peux faire ceci? Tout ce que je veux savoir est si un objet donné peut être jeté à un type donné, à savoir si oui ou non:
(SomeType)Value
fonctionnera.
Vous souciez-vous * représentation changeant * moulages? Autrement dit, supposons que vous avez un short dans votre objet. Voulez-vous être en mesure de le lancer à int? Vous ne pouvez pas lancer un short boxed directement à int; vous devez le lancer en int d'abord, puis à court.Vous pourriez vouloir lire mon essai sur le sujet pour vous assurer que vous comprenez ce qui se passe ici: http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx –
Doivent-ils être des types de valeur encadrés? Normalement, la méthode OO consiste à créer une interface avec une méthode Process dont chaque type vous hérite, puis appelez la méthode sur l'objet sans vous soucier du type. –