Hallo zusammen.
ich hab da eine generische Funktion und ich muss bei eine bestimmten Typ etwas anderes ausführen. Wie kann man herausfindet um welchen Typ es sich dabei handelt
Ich würde so was brauchen
if (typeof(T)==String)
{
}
Hat vielleicht einer eine Idee,
Besten Dank im Voraus
LastGentleman
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Frage: Wozu das? Generischer Code muss mit jedem Typen funktionieren! Wozu also eine Abfrage? Ansonsten gibt es ja die Where-Klausel um die Typen einzuschränken. Dann wird auch zur Compile-Zeit geprüft und nicht erst zur Laufzeit.
Hallo svenson,
danke für deine Antwort ich habe da eine Funktion für Datenbanken, die generisch einstetzbar ist.
Wenn ich ein Objekt mit dem Int Wert, durch einen Cast in eine Variable vom Typ String umwandle, erzeugt er mir einen Fehler.
z.B.:
(string) 234 //Fehler
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Bei generischen Typen wirst du immer einen Fehler bekommen. Denn wenn du ein Objekt eines beliebigen Typen T hast, kann der niemals sicher gecastet werden.
In diesem Fall bleibt dir nur object.ToString() zu benutzen, oder eine Eingeschränkung zu machen, die die Konvertierung sicher erlaubt (das tut IConvertible):
public class MyGenericClass<T> where T:IConvertible{ }
Das geht nicht nur mit Klassen, sondern auch mit Funktionen:
public UInt32 MyMethod<T>(T t) where T : IConvertible
{
return t.ToUInt32();
}
In meinem Fall würde sich das leider nichts bringen schluchz, da das Interfact IConvertible die Methode toString() implementiert.
Werde eine eigene Funktion machen müssen.
Liebe Grüße
LastGentleman
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Original von LastGentleman
...da das Interfact IConvertible die Methode toString() implementiert.
??? Ich denke du willst nach String konvertieren?
ja schon aber leider ist, dass das Problem
(T) Var1
//kann nun beim Ausführen nach
(string) 234 //Fehler
//werden
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Hallo LG
Du kannst per Cast keinen int zu einem String konvertieren.
Das gibt schon einen Fehler beim builden.
Verwende die .ToString() Methode dafür.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Nur um das nochmal festzuhalten, ein Cast ist keine Konvertierung.
Casts wandeln in der Regel nur in Typen um, die das Objekt ohnehin schon hat. Und das Objekt bleibt das Selbe. Eine Konvertierung erzeugt ein neues Objekt mit einem ganz anderen Typ aus den Informationen des ursprünglichen Objekts.
Du willst den Typ ja komplett Wechseln, also suchst du eine Konvertierung. Convert sollte da auch der passende Suchbegriff sein.
Und der generische Parameter ist hier auch völlig falsch eingesetzt. Generics sollten nicht den Polymorphismus ersetzen. Der würde hier völlig ausreichen.
Es gibt genau 4 Fälle in denen man zu einer generischen Methode greifen sollte:
Alles andere lässt sich über Polymorphismus (inklusive dem is Operator) äquivalent lösen und spart den Overhead von Generics. Zumindest fällt mir kein weiterer Grund ein, warum eine Funktion generisch sein sollte.
e.f.q.
Aus Falschem folgt Beliebiges
Hallo,
zur Frage des OP:
if( typeof( T ) == typeof( string ))
{
Console.Out.WriteLine( "Generic Type is string" );
}
else
{
Console.Out.WriteLine( "Generic Type is NOT string" );
}
Grüsse, Egon
egrath's Blog: http://egonrath.eg.funpic.de/wordpress
Vielen Danke an alle, die mit mir das Problem durchdacht haben. Das Codeschnipzel von egrath ist genau das was ich suchte
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein