2016-03-29 19 views
-1

对于下面的代码,我在没有body的情况下添加“private set”的原因是为了使它在这个类之外是不可变的。 ReSharper的不断告诉我“”价值”不使用参数‘’,这是什么意思吗?请问setter的意思是什么“”value“参数不被使用”?

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

     private set 
     { 
     } 
    } 
+0

首先谷歌结果:https://confluence.jetbrains.com/display/ReSharper/'value'+parameter+is+not+used – user3114639

+0

没有为所述一组方法的隐式'value'参数,和你没有做任何事情。 set方法是私有的这一事实使得它在类之外是不可变的,事实上它没有body意味着它实际上也是类内部不可变的(因为你不使用传入的值)。您应该根本没有设置方法,或者您应该使用该值来实际更新对象 –

回答

2

如果你打算使用一个二传手,那么你还需要利用value关键字。如果你不想要一个二传手,使得ErrorCode只读属性,然后你可以只取出private-set条款。没有办法,否则,以避免这种情况。

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

     private set 
     { 
      _globalVar = value; 
     } 
    } 
+0

Thx。所以基本上我需要添加一个globe变量。 – Sam003

+1

@ Sam003正确。如果你打算写一个更复杂的属性,那么它需要修改另一个变量。尽管如此,可能会更好地使用公共方法。 – Tdorno

2

如果你们一定不能有一个自动像二传手实现get。你有几个选择:

1.一起移除setter,这样你只能获得属性。您可以直接从课程级别操纵私人领域。不推荐

  1. 在setter中提供最小的实现:_yourPrivateField = value;懒惰但会做。

  2. 为setter提供一些验证 - 总是首选。

相关问题