2016-03-29 7 views
-1

Für die folgenden Codes ist der Grund, warum ich "private set" ohne einen Körper hinzufüge, es außerhalb dieser Klasse unveränderlich zu machen. Die resharper halten mir zu sagen, „“ Wert“Parameter wird nicht‚‘verwendet, was dies tut, bedeutet bitte?was wird "" wert "parameter nicht verwendet" am setter bedeutet bitte?

public string ErrorCode 
    { 
     get 
     { 
      if (!this.request.Completed) 
      { 
       return "Incomplete"; 
      } 
      return this.request.Error.ToString(); 
     } 

     private set 
     { 
     } 
    } 
+0

erste Google-Ergebnis: https://confluence.jetbrains.com/display/ReSharper/'value'+parameter+is+not+used – user3114639

+0

Es gibt einen impliziten 'value' Parameter für die Set-Methode, und Du machst nichts damit. Die Tatsache, dass die set-Methode privat ist, macht sie außerhalb der Klasse unveränderlich, die Tatsache, dass sie keinen Körper hat, bedeutet, dass sie auch innerhalb der Klasse unveränderlich ist (da Sie den übergebenen Wert nicht verwenden). Sie sollten entweder überhaupt keine set-Methode haben, oder Sie sollten den Wert verwenden, um Ihr Objekt tatsächlich zu aktualisieren –

Antwort

2

Wenn Sie einen Setter verwenden werden, dann müssen Sie auch den value Schlüsselwort machen. wenn Sie einen Setter nicht wollen, so dass die ErrorCode Eigenschaft Read-only dann könnte man einfach die private-set Klausel entfernen. Es gibt keine Möglichkeit, dies sonst zu vermeiden.

public string ErrorCode 
    { 
     get 
     { 
      if (!this.request.Completed) 
      { 
       return "Incomplete"; 
      } 
      return this.request.Error.ToString(); 
     } 

     private set 
     { 
      _globalVar = value; 
     } 
    } 
+0

Thx. Also muss ich im Grunde eine globale Variable hinzufügen. – Sam003

+1

@ Sam003 Korrigieren. Wenn Sie eine komplexere Eigenschaft schreiben möchten, muss sie eine andere Variable ändern. Es könnte besser sein, eine öffentliche Methode für Ihren Fall zu verwenden. – Tdorno

2

Sie nicht automatisch wie Setter haben können, wenn Sie haben Sie haben wenige Optionen:

1. Entfernen Sie den Setter alle zusammen, so dass Sie nur Eigentum erhalten haben. Sie können das private Feld direkt von der Klassenebene aus bearbeiten. Nicht empfohlen

  1. Minimale Implementierung in Setter: _yourPrivateField = value; Faul aber wird es tun.

  2. Geben Sie Setter mit einigen Validierung - immer bevorzugt.