2010-09-15 2 views
0
string sortedcolumn = 
(dataGridView1.SortedColumn != null 
? dataGridView1.SortedColumn.Name 
: "username" 
); 

В выше даного когда dataGridView1.SortedColumn==null я получаю исключение из dataGridView1.SortedColumn равно нулю вместо того, чтобы получать значение, как "username" к sortedcolumn вар.Странное поведение условного оператора?

Любая идея?

+0

Какое происшествие вы получаете? На каких словах кода? Случается ли это также, когда вы меняете его на регулярные, если ... заявления? – rkellerm

+3

Вы уверены, что вы получите исключение NullReferenceException на SortedColumn, а не на dataGridView1? –

+1

Это не нулевой коалесцирующий оператор, это высшая степень выражения. – leppie

ответ

2

Возможные причины:

  • dataGridView1 является полем или переменной, содержащей значение NULL.

  • dataGridView1 - свойство getter, которое возвращает null.

  • SortedColumn - это странное свойство getter, которое возвращает что-то ненулевое в первый раз, но null после этого. (Очень маловероятно, потому что тогда просто смотрит на него в отладчик изменит результат.)

  • dataGridView1, SortedColumn или Name это свойство геттер, который бросает исключение, вы видите.

  • dataGridView1.SortedColumn имеет тип, который перегружает operator!=, что вызывает исключение, которое вы видите.

  • dataGridView1.SortedColumn.Name относится к типу, который реализует implicit operator string, что вызывает исключение, которое вы видите.

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