Was ich brauche, ist eine Methode, die nach einer Bedingung einen Typ zurückgeben kann (kein Objekt, weil kein Casting erlaubt ist). Hier ein Beispiel:C#, dynamischer Rückgabetyp
??? 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!!
}
ich Generika versucht, aber ich war nur in der Lage, die Art zurückzugeben, die in kommen würden, (wenn ein Zeichen in einem char kommt zurückgegeben wurde, und wenn eine Zeichenkette in einem String kommt, war zurückgekehrt). Ich versuchte dies:
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;
}
ich nicht typecasting (Rückkehr ein Objekt) verwenden können, kann nicht params Verwendung ref.
Anrufe an die Methode die gleiche bleiben:
right(stringOrChar,int) -> returns string or char.
Danke
Vielleicht aus Sie uns helfen könnten. Warum möchten Sie mehrere Rückgabetypen haben? Warum willst du in manchen Fällen einen Char und in anderen eine Saite? – McKay
OK, der Grund, warum ich das brauche, ist, weil ich viel Code portiere, Syntax ist meistens kompatibel, aber ich muss wissen, ob es möglich ist, dies zu tun, weil es viele "links (str, 1) <'x gibt '"aber zu anderen Zeiten ist es einfach abc = links (str, 3). Es scheint keine klare Unterscheidung von einem Zeichen zu einer Zeichenkette in der Sprache zu geben, von der es kommt. Das Ziel hier ist, den Code WENN MÖGLICH nicht zu berühren, aber es ist nicht, weil ich nicht weiß, wie das nicht möglich ist :-) – Enriquev