Ich versuche, ein Objekt in einen generischen Typ zu konvertieren. Hier ist ein Beispiel Methode:Generische Art Conversions
void Main()
{
object something = 4;
Console.WriteLine(SomeMethod<int>(something));
Console.WriteLine(SomeMethod<string>(something));
}
public T SomeMethod<T>(object someRandomThing)
{
T result = Convert.ChangeType(someRandomThing, typeof(T));
return result;
}
Dies gibt diesen Fehler:
Cannot implicitly convert type 'object' to 'T'. An explicit conversion exists (are you missing a cast?)
ich mehrere Varianten ausprobiert haben mein Ergebnis werfen als gattungs zu bekommen, aber es wird nicht jedes Mal ausarbeitet.
Gibt es eine Möglichkeit, diese Besetzung zu machen?
HINWEIS: In meinem realen Beispiel bekomme ich ein "Objekt" von einer gespeicherten Prozedur zurück. Die Methode könnte eine von mehreren gespeicherten Prozeduren aufrufen, so dass das Ergebnis eine Zeichenfolge oder ein Int (oder Long) sein könnte, abhängig davon, welcher Sproc aufgerufen wird.
Sie sollten es vermeiden, sich in dieser Position zu allen möglichen Kosten setzen. Wenn Sie zwei Prozeduren aufrufen, die unterschiedliche Dinge zurückgeben, können Sie eine davon in einen Methodenaufruf umwandeln, der den Typ in den gewünschten Typ ändert, sodass Sie jederzeit wissen, um was für * den * Typ Ihrer Eingaben es sich handelt sind. – Servy
@Servy - das mache ich. Bei der fraglichen Methode handelt es sich um eine geschützte Methode einer abstrakten Basisklasse zum Abstrahieren der Datenbankverrohrung. Die Public-Methode besteht aus mehreren Varianten, die wie GetNewWidgetId() aussehen und die geschützte Methode aufrufen. – Vaccano
Anstatt die abstrakte Methode ein Objekt zurückgeben zu lassen, muss sie entweder eine Zeichenfolge oder ein int zurückgeben; eine der Implementierungen benötigt, um den Rückgabewert ihres DB-Aufrufs so zu ändern, dass sie von der Methode zurückgegeben werden muss. – Servy