C#, dynamique type de retour

Ce dont j'ai besoin est une méthode qui peut retourner un type (pas d'objet, de cause pas de casting autorisé) à la suite d'une condition. Voici un exemple:

??? right (string fullStr, int endPosition)
{
 string tmpStr = "";

 tmpStr = fullStr.Substring(endPosition);

 if(tmpStr.Length == 1)
   return tmpStr[0]; //return a char!!
 else
   return tmpStr; //return a string!!
}

J'ai essayé les génériques, mais je n'ai pu retourner le type qui était à venir, (si un char est monté dans un char a été retourné, et si une chaîne est entré dans une chaîne de caractères a été remis).
J'ai essayé ceci:

    public static T right<T>(T stringToCheck, int endPosition)
    {
        if (typeof(T).ToString() == "System.String")
        {
            string fullString = (string)((object)stringToCheck);
            string response = "";

            response = fullString.Substring(endPosition);

            if (response.Length == 1)
            {

                return (T)((object)response[0]);
            }
            else
                return (T)((object)response);
        }

        return stringToCheck;
    }

Je ne peux pas utiliser typecasting (de retour d'un objet), ne peuvent pas utiliser ref params.

Les appels à la méthode doit rester le même:

right(stringOrChar,int) -> returns string or char.

Merci

  • Peut-être que vous pourriez nous aider. Pourquoi est-ce que vous souhaitez avoir plusieurs types de retour? Pourquoi est-ce que vous voulez un char dans certaines circonstances, et une chaîne de caractères dans d'autres?
  • Ok bien la raison pour laquelle je sorte de besoin c'est parce que je suis le portage de beaucoup de code, la syntaxe est la plupart du temps compatible, mais je dois savoir si c'est possible de le faire car il y a beaucoup de " gauche(str,1) < 'x' ", mais d'autres fois, il est tout simplement abc = gauche(str,3). Il semble y avoir pas de distinction nette d'un char à une chaîne de caractères dans la langue ce qui est à venir à partir de. Le but ici est de ne pas toucher au code, SI POSSIBLE, mais ce n'est pas parce que je ne sais pas comment que c'est pas possible 🙂
InformationsquelleAutor Enriquev | 2009-11-23