Der Wert des Typs 'T' kann nicht in konvertiert werden
Dies ist wahrscheinlich eine eine Anfänger Frage, aber google überraschenderweise nicht beantworten.
Habe ich diese sehr künstliche Methode
T HowToCast<T>(T t)
{
if (typeof(T) == typeof(string))
{
T newT1 = "some text";
T newT2 = (string)t;
}
return t;
}
Kommen aus einem C++ - hintergrund habe ich erwartet, dass dies funktioniert. Jedoch nicht zu kompilieren mit "kann Nicht implizit konvertiert Typ" T "string" und "Cannot convert type 'T' , string" für beide der oben genannten Aufgaben.
Bin ich entweder etwas konzeptionell falsch oder hast einfach die falsche syntax. Bitte helfen Sie mir Sortieren.
Danke!
Kommentar zu dem Problem
IMO, wenn Sie die überprüfung in Ihrem Generika-code, dann Generika wahrscheinlich nicht die richtige Lösung für Ihr problem.
Der Ausdruck
typeof(T) == typeof(string)
ist behoben, zur Laufzeit, nicht zur Kompilierzeit. So ist die folgende Zeile in dem block ist ungültig. (T)Konvertieren.ChangeType(newT1, typeof(T))
@vsapiha, funktioniert Nur, wenn das Objekt IConvertible implementieren. Süße, wenn es nicht, obwohl.
InformationsquelleAutor der Frage Alex | 2010-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl es im inneren eines
if
block, der compiler weiss nicht, dassT
iststring
.Also, es lässt Sie nicht Stimmen. (Aus dem gleichen Grund, dass Sie nicht gegossen
DateTime
zustring
)Müssen Sie zu werfen, um
object
(alleT
werfen kann), und von dort aus zustring
(seitobject
umgewandelt werden kannstring
).Zum Beispiel:
InformationsquelleAutor der Antwort SLaks
Beide Linien das gleiche problem haben
Der compiler nicht wissen, dass T ist ein string und hat damit keine Möglichkeit zu wissen, wie zu vergeben.
Aber da Sie überprüft, können Sie nur zwingen es mit
brauchen Sie nicht zu werfen, die t-da ist es schon ein string ist, müssen auch hinzufügen, die constraint -
InformationsquelleAutor der Antwort Doggett
Wenn Sie die Prüfung für explizite Typen, warum sind Sie deklarieren die Variablen, die als
T
's?InformationsquelleAutor der Antwort Austin Salonen
Erhalten Sie auch diese Fehlermeldung, wenn Sie eine Allgemeine Erklärung für beide Ihre Klasse und Ihre Methode. Zum Beispiel wird der unten gezeigte code gibt diese compile-Fehler.
Dieser code nicht kompilieren (Hinweis: T entfernt von der Methode der Deklaration):
InformationsquelleAutor der Antwort John
Ändern Sie diese Zeile:
Für diese Linie:
InformationsquelleAutor der Antwort Serch