2017-08-06 2 views
-1

Das Datumsobjekt in dateTime = DateTime.Parse(date); oder etwas anderes ist im Konstruktor nicht verfügbar, da es nicht festgelegt wurde. Wäre der einzige Weg dazu all diese im Konstruktor zu setzen?Im Konstruktor nicht verfügbare Eigenschaften

public class BorrowedItemModel 
    { 
    public String _id { get; set; } 
    public String issuer { get; set; } 
    public String issued { get; set; } 
    public String issuedname { get; set; } 
    public String obj { get; set; } 
    public String date { get; set; } 
    private DateTime dateTime { get; set; } 
    private TimeSpan timeleft { get; set; } 
    public string TimeLeftString { get; set; } 
    private Timer timer; 

    public BorrowedItemModel() 
    { 
     timer = new Timer(1000*60); 
     timer.Elapsed += Timer_Elapsed; 
     timer.Enabled = true; 
     dateTime = DateTime.Parse(date); 
     timeleft = dateTime - DateTime.UtcNow; 
    } 

    private void Timer_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     timeleft = timeleft.Subtract(TimeSpan.FromMinutes(1)); 
     TimeLeftString = timeleft.ToString(); 
    } 
} 
// where this is called in another class // 

model = new BorrowedItemModel { _id = value["_id"].ToString(), date = value["date"].ToString(), issuer = value["issuer"].ToString(), issued = value["issued"].ToString(), issuedname = value["issuedname"].ToString(), obj = value["obj"].ToString() }; 
+3

Warum haben Sie separate Eigenschaften für 'date' und' dateTime' überhaupt zu aktualisieren? Wenn sie verwandt sein sollen, haben Sie nur eine einzige Eigenschaft - oder wenn Sie * wirklich * müssen, haben Sie zwei Eigenschaften, die ein gemeinsames Feld verwenden. Ich würde Ihnen auch dringend empfehlen, die .NET-Namenskonventionen zu lesen und zu befolgen. –

+0

Es gibt mehrere Möglichkeiten, sich Ihrem speziellen Anliegen zu nähern, aber ich stimme zu, dass die Eigenschaft 'dateTime' nicht von vornherein festgelegt wird. Definiere es einfach als 'private DateTime dateTime => DateTime.Parse (date);'. Dies vermeidet den anderen Fehler, den Sie haben, nämlich dass Sie die Eigenschaft "date" oder "dateTime" später festlegen können und dann die beiden nicht mehr synchron sind. Leider ist Ihre Frage zu weit gefasst, um zu wissen, was Sie als Antwort am besten wollen. –

+0

Die Syntax, die Sie verwenden, ist ein Objektinitialisierer. Es ruft den Konstruktor FIRST auf und THEN weist die Eigenschaften für das neue Objekt zu. Vielleicht fügen Sie Ihrem Konstruktor stattdessen Parameter hinzu, wenn Sie möchten, dass das Datum darin verarbeitet wird (obwohl ich den berechneten Eigenschaften für dateTime und timeleft und den folgenden Namenskonventionen zustimme). – pinkfloydx33

Antwort

1

Sie können Ihre Datum Eigenschaft definieren Sie Ihre Datums- und Uhrzeit Eigenschaft

public class BorrowedItemModel 
    { 
    public String _id { get; set; } 
    public String issuer { get; set; } 
    public String issued { get; set; } 
    public String issuedname { get; set; } 
    public String obj { get; set; } 
    private String _date; 
    public String date 
    { get {return _date;} 
     set 
     { 
     _date=value; 
     dateTime = DateTime.Parse(value); 
     timeleft = dateTime - DateTime.UtcNow; 
     } 
    } 
    private DateTime dateTime { get; set; } 
    private TimeSpan timeleft { get; set; } 
    public string TimeLeftString { get; set; } 
    private Timer timer; 

    public BorrowedItemModel() 
    { 
     timer = new Timer(1000*60); 
     timer.Elapsed += Timer_Elapsed; 
     timer.Enabled = true; 
     //dateTime = DateTime.Parse(date); 
     //timeleft = dateTime - DateTime.UtcNow; 
    } 

} 
Verwandte Themen