Странное поведение в TextBox.Text

2

TextBox.Text - это строковое свойство

но если вы назначаете int, decimal..etc, то он работает!!

int x = 5;

Textbox1.Text = x; // it works

любое тело знает, почему я могу сказать?

  • 1
    и строка x = 3 вызовет ошибку.
Теги:

4 ответа

8
Лучший ответ

Из-за Неявное преобразование.

Здесь - полный список неявных числовых преобразований

Как отметил Сонни, из здесь

Если опция Strict включена, вышесказанное пример вызывает ошибку компилятора. Если Опция Strict выключена, однако преобразование выполняется неявно, хотя это неявное преобразование может привести к ошибке во время выполнения. Для эта причина, вы всегда должны использовать Option Strict On.

  • 0
    В качестве примечания: предпочтительно не запускать с выключенным Option Explicit или Option Strict. (Это настройки VB, я предполагаю, что C # - то же самое).
2

С# позволяет неявное преобразование в String из числового типа. Таким образом, это работает, потому что это эквивалентно:

TextBox1.Text = x.ToString();

2

Типы значений, такие как int, double и т.д., имеют метод ToString(), который автоматически вызывается для вас. Вы можете это увидеть, набрав x.ToString(); Что действительно происходит под капотом, так это то, что тип значения "помещается в коробку" в соответствующий ссылочный тип (класс), а класс имеет метод ToString.

1

как уже указывалось, это происходит из-за иммического преобразования.

Другой пример:

?Console.WriteLine(1)
1
?Console.WriteLine("1")
1

потому что

Console.WriteLine(1) == Console.WriteLine(1.ToString())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню