get;set; mit DateTime zu überprüfen .TryParse?

Ich bin versucht zu bewegen Validierung der input-Daten in den get;set; einer Klasse struct.

public void PlotFiles()
    {

     List<DTVitem.item> dataitems;
        DTVitem.item i;
        DateTime.TryParse("2012/01/01", out i.dt);
        DateTime.TryParse("04:04:04", out i.t);
        int.TryParse("455", out i.v);
        dataitems.Add(i);

    }

Struct deklariert ist, in eine separate Klasse (wahrscheinlich unnötig):

public partial class DTVitem
{
    public struct item
    {
        public DateTime dt;
        public DateTime t;
        public int v;
    }
}

Jedes mal, wenn ich DTVitem.item.dt, DTVitem.item.t oder DTVitem.item.v ich wünschte, es zur Erfüllung der jeweiligen .TryParse() zur Validierung des Eigentums Inhalt.

Jedoch, wenn ich versuche zu verwenden, TryParse() wie folgt (versuchen zu wickeln meinem Kopf herum das Beispiel aus der MSDN):

public partial class DTVitem
{
    private DateTime _datevalue;

    public string dt
    {
        get { return _datevalue; }
        set { DateTime.TryParse(value, out _datevalue) ;}
    }
}

Erhalte ich die Fehlermeldung, dass _datevalue is a DateTime and cannot be converted to a string. Der Grund ist offensichtlich, dass der Rückweg muss wieder der Typ der dt in diesem Fall (a string). Jedoch, ich haben versucht, die massage es ein paar verschiedene Möglichkeiten, und ich bin nicht in der Lage, es zu hacken.

Wie kann ich mein Ziel erreichen der Validierung eines string Wert als DateTime bei der Einstellung als eine Eigenschaft einer Instanz der Struktur struct?

Ist mit set wie ich bin versucht, die am besten Weg?

Kann ich sehen, dass es eine Menge von Wert in die Verwendung von get;set; für die Validierung und möchte wirklich, es zu verstehen.

Vielen Dank,

Matt

[Bearbeiten]

Dank Jon Skeet unten für den Hinweis auf den err meiner Wege.

Hier ist noch ein thread über Probleme mit mutable structs, und andere sprechen über die Instanziierung einer Struktur. Hinweis structs sind value-Typen.

Ich glaube, der rest von dem, was er war und wies ist irgendwie vereinbaren, dass das vergraben der struct Weg, weit Weg, ist es nicht nötig, und ich sollte überprüfen, warum mache ich es.

[Lösung]

Habe ich berücksichtigt einige Empfehlungen unten und kommen mit dem folgenden:

public partial class DTVitem
{
    private DateTime _dtvalue, _tvalue;
    private int _vvalue;

    public string dt
    {
        get { return _dtvalue.ToString(); }
        set { DateTime.TryParse(value, out _dtvalue); }
    }

    public string t
    {
        get { return _tvalue.ToString(); }
        set { DateTime.TryParse(value, out _tvalue); }
    }

    public string v
    {
        get { return _vvalue.ToString(); }
        set { int.TryParse(value, out _vvalue); }
    }
}

In meinem Programm Klasse, ich habe instanziiert und mit den folgenden:

DTVitem item = new DTVitem();
item.dt = "2012/01/01";
item.t = "04:04:04";
item.v = "455";

Also habe ich entschieden, nicht zu verwenden, um eine Struktur, sondern eine Klasse, oder wirklich eine Instanz der Klasse.

Es ist äußerst unklar, warum hast du eine öffentliche veränderliche Struktur mit öffentlichen Bereichen, wie ein nested type innerhalb DTVitem. Alle diese wirken wie eine schlechte Idee zu mir.
Ihr Fehler ist, da Sie zurückgeben, eine DateTime im get für eine Eigenschaft, die erklärt, wie ein string.
Get-und Set sollte nur get-und set-Variablen. Es klingt wie ein Klasse würde mehr Sinn machen, Sie als eine Struktur, zumindest so, wie Sie es verwenden. Das Stück aufrufen soll verantwortlich sein für die Verwendung ein Gültiger DateTime-nicht der struct/class.
Überhaupt nicht wahr. Können Sie Kapseln Funktionalität in eine Immobilie, einschließlich der Validierung. Es gibt keinen Grund, zu kopieren Sie die Validierung code, um oder setzen Sie Anrufe, um es überall Sie setzen die Eigenschaft
Danke John für den Hinweis auf den schrecklichen Fehler. Ich bin kein dev durch Handel, also bin ich "voll-Dampf-ahead" - ing. Ich werde in diesem Blick, wie es ganz klar ein grundlegender Fehler. Sie könnten mehr konstruktiv beraten und über weitere Einzelheiten, es sei denn, der Ausschnitt ist so riesig, dass ich wieder auf meinen letzten Satz. Danke Ryan, ich werde in diese Richtung.

InformationsquelleAutor mbrownnyc | 2013-02-19

Schreibe einen Kommentar