Rückgabetyp T, kann nicht als null zurückgegeben? C# - Generika

Habe ich eine Methode, die generisch deserialisiert eine gespeicherte Objekt von einem Nutzer zur Verfügung gestellt Dateipfad und-Objekt-Typ. Die Methode funktioniert gut, außer, wenn der Benutzer einen ungültigen Dateipfad. Ich möchte, dass meine Methode null zurück, in diesem Fall, aber wenn ich Versuch auf null zurück, bekomme ich einen Kompilierungsfehler. Ich habe versucht, eine nullable-Typ, erhalten aber einen Kompilierungsfehler. Stattdessen habe ich Typumwandlung eines Objekts und zurück, aber es führt zu einem Laufzeitfehler. Ich würde gerne wissen, ob jemand weiß, der richtige Weg zu sein, um für die Rückgabe einer null. Der code ist wie folgt:

        public static T RestoreObj<T>(string datafile)
    {


        try
        {
            var fs = File.OpenRead(datafile);
            var bf = new BinaryFormatter();
            var obj = (T) bf.Deserialize(fs);
            fs.Close();
            return obj;
        }
        catch (Exception e)
        {
            MessageBox.Show("Could not load. Accepts valid *.dom files only. " + e);

            //TODO: how to do this? this will throw a runtime error, and if null returned, a compilation error
            var o = new object();
            return (T) o;
        }
    }

Nach der Einnahme von Eric Lippert die Qualität der Kommentare zu berücksichtigen, überarbeitete ich die Methode Aussehen, welche Sie unten sehen. Der Vorteil der Verwendung von 'Verwendung' ist, dass es erzeugt automatisch einen try..finally-block, wird die dispose-Methode (FileStream IDisposable implementiert, wenn es nicht Ihre würde zu einem Kompilierfehler). Eine andere nette Sache ist, dass die Ausnahme, die ausgelöst wird, relevant ist, was wirklich geschieht, statt mit dem, was ich schon oben.

        public static T RestoreObj<T>(string datafile) 
    {
        using (var fs = File.OpenRead(datafile))
        {
            var bf = new BinaryFormatter();
            var obj = (T)bf.Deserialize(fs);
            return obj;
        }
    }

InformationsquelleAutor sapbucket | 2011-09-07

Schreibe einen Kommentar