2016-04-04 4 views
4

Каждый раз, когда я использую this._Something, мой this. светло-голубой и имеет зеленую подсветку. И я не могу получить значение 101 после F5. Вместо этого я получаю значение 0. Любая помощь?«этот» оператор не работает

class Student 
{ 
    private int _ID; 

    public void SetID(int Id) 
    { 
     if (Id <= 0) 
     { 
      throw new Exception("It is not a Valid ID"); 
      this._ID = Id; 
     } 
    } 

    public int GetID() 
    { 
     return this._ID; 
    } 
} 

class Program 
{ 
    public static void Main() 
    { 
     Student C1 = new Student(); 
     C1.SetID(101); 
     Console.WriteLine("Student ID = {0}", C1.GetID()); 
    } 
} 
+1

'this._ID = Id,' должен быть вне 'if {}' else, о котором он никогда не писал. Наведите указатель мыши на подчеркнутый символ/посмотрите в левом поле, и VS расскажет вам, что его нытье. –

+0

Хорошо, но почему это Lightblue в моей Visual Studio? –

+0

@ ZvezdaBre см. Мой ответ – wudzik

ответ

3

Вы назначаете _ID только если (Id < = 0), измените код:

public void SetID(int Id) 
{ 
    if (Id <= 0) 
    { 
     throw new Exception("It is not a Valid ID"); 
    } 
    _ID = Id; 
} 

Ваш this вызова Lightblue, потому что VS говорит вам, что вы не должны используйте его здесь. У вас нет локальной переменной с тем же именем. Подробнее о thishere

BTW вы должны прочитать о свойствах с отступающими полями, например here

3

Я предлагаю перепроектирование какget и set методы в единую собственности; у вас нет необходимости имитировать Java в C#:

class Student { 
    private int _ID; 

    public int ID { 
    get { 
     return _ID; 
    } 
    set { 
     // input validation: 
     // be exact, do not throw Exception but ArgumentOutOfRangeException: 
     // it's argument that's wrong and it's wrong because it's out of range 
     if (value <= 0) 
     throw new ArgumentOutOfRangeException("value", "Id must be positive"); 

     _ID = value; 
    } 
    } 
} 

...

public static void Main() 
{ 
    Student C1 = new Student(); 
    C1.ID = 101; 
    Console.WriteLine("Student ID = {0}", C1.ID); 
} 
1

Тест

class Student 
{ 
    private int _ID; 

    public int ID 
    { 
     get{ return _ID;} 

     set { 
      if (value <= 0) 
       throw new Exception("It is not a Valid ID"); 
      _ID = value; 
      } 

    } 


} 

class Program 
{ 
    public static void Main() 
    { 
     Student C1 = new Student(); 
     C1.ID=101; 
     Console.WriteLine("Student ID = {0}", C1.ID); 
    } 
} 
+0

Да, спасибо. Я забыл это. – MNF

Смежные вопросы