2017-12-30 10 views
0

Ich war auf der Suche durch die Interna von DbSet, wenn ich über einige wierd Code kam:willkürliche Zuordnung in Methode

private void CheckState() 
{ 
    // ReSharper disable once AssignmentIsFullyDiscarded 
    _ = EntityType; 
} 

Hinweis _ nicht überall wird erklären, dass sie die neuen C# 7.0 Discard Operator verwenden. Warum sollte jemand so etwas tun wollen? Hat das einen Vorteil?

bearbeiten

private IEntityType EntityType 
    { 
     get 
     { 
      _context.CheckDisposed(); 

      if (_entityType != null) 
      { 
       return _entityType; 
      } 

      _entityType = _context.Model.FindEntityType(typeof(TEntity)); 

      if (_entityType == null) 
      { 
       throw new InvalidOperationException(CoreStrings.InvalidSetType(typeof(TEntity).ShortDisplayName())); 
      } 

      return _entityType; 
     } 
    } 
+0

Um ReSharper Warnungen zu unterdrücken, nehme ich an. Wenn es die Methode so einfach aufruft, wird ReSharper Sie daran erinnern, dass es einen unbenutzten Rückgabewert gibt. – Sweeper

+0

Unmöglich zu sagen, ohne den Rest des Codes zu sehen. Aber wenn 'EntityType' eine Eigenschaft ist, ist es möglich, dass der Getter einige Nebeneffekte hat, die der Code-Autor wünscht (keine gute Eigenschaft für einen Eigenschaften-Getter, aber so sind die Dinge manchmal). (Da sich herausstellt, dass Ihr Link direkt zu dem Modul führt, in dem die Eigenschaft definiert ist, kann ich sehen, dass diese Eigenschaft tatsächlich einen Wert zwischenspeichert. Daher ist es möglich, dass der Autor den Wert abfragen und/oder validieren möchte.) Alles, was wir anbieten können, sind Meinungen; nur der Autor dieses Codes kann Ihnen sicher sagen, warum sie es getan haben. –

+0

Es gibt einen Link zu dem Code in der Frage auf GitHub –

Antwort

2

, die wie eine Eigenschaft get Zugang sieht, die eine Nebenwirkung hat. Sie können eine Eigenschaft nicht aufrufen, ohne sie einem Objekt zuzuordnen (oder als Ausdruck zu übergeben) (für get) oder etwas zuzuweisen (für set). Sie können nicht nur haben:

EntityType; 

Alles, was sie tun macht deutlich, dass sie das Ergebnis der get verwerfen wollen, vermutlich eine nicht verwendete Variable Warnung zu vermeiden.

+0

es klingt wie ein Nebeneffekt, ich habe eine Bearbeitung der Frage gemacht, um die Eigenschaft einzuschließen. Macht nicht viel Sinn noch, ich sehe nichts zu offensichtlich –

+0

@ johnny5 es läuft eine Menge von "sind Sache richtig und glücklich" Logik - sie versuchen nur, das aufzurufen; insbesondere die entsorgte Prüfung, aber auch die Config-Prüfung (die nur einmal durchgeführt wird, über das gespeicherte Feld, das diese Prüfung kurzschließt). –

+0

Das macht Sinn, ich fühle mich wie eine validierte Methode, die Dinge klarer zu machen, aber dann wieder diese Quelle soll normal versteckt sein. Danke für Ihre Expertise –

Verwandte Themen