2010-02-22 3 views
3

Есть ли функция .Net, которая делает это. Я думаю, если нет, я должен сделать свой собственный метод.Преобразование String.Empty в Nothing/Null

Дело в том, что у меня есть функция. Он принимает целые числа. Если вы передадите целое число 0 или нулевое значение, оно все равно будет работать. Проблема в том, что значение пустого текстового поля является значением String.Empty.

Я не хочу использовать if. Я имею в виду, что мог, но его гораздо лучше, если я могу просто позвонить моя функция как этот

MyFunction (txtTextbox.Text)

Но это не будет работать, потому что он не может преобразовать String.Empty в целое число ,

+0

Этот вопрос сбивает с толку. Является ли 'MyFunction' такой же, как функция, на которую вы ссылаетесь во втором абзаце? Кажется, что это не так, потому что вы явно намеревались передать ему «string», а не «целое число 0» или «null». Если вы не знаете, вы не можете просто передать 'string' функции, принимающей' int' или 'int?'. –

+0

Почему бы и нет? Он принимает целые числа, но если вы передаете строку, она должна быть неявно преобразована в любом случае. MyFunction («200») - работает. – Tomasi

+0

Что делать, если число, представленное в строке, слишком велико, чтобы соответствовать целому числу? Что, если строка представляет число с плавающей запятой? Что делать, если строка не является числовой? Это все случаи, которые вы должны обрабатывать, и один чистый способ сделать это правильно преобразует значения строк в целые числа _beforehand_. – zneak

ответ

4

Я думаю, вам нужно:

if(string.IsNullOrEmpty(value)) value = null; 

или

int MyFunction(string value) 
{ 
     if(string.IsNullOrEmpty(value)) return 0; 

     int val = 0; 
     int.TryParse(value, out val); 
     return val; 
} 
+0

Последнее не требует дополнительного 'if (...) return 0;'. Кроме того, любой метод, принимающий параметр 'out', должен присвоить ему значение до его возвращения. Так что 'val' всегда будет инициализирован, нет необходимости делать это снова. (часть '= 0'.) –

+0

@andras: Спасибо за заметки. –

+0

Добро пожаловать. –

3

насчет, эм, принимая целое число в вашей функции, которые должны читать целые числа, и использование int.Parse или int.TryParse на строке заранее?

0

С другой точки зрения, я предполагаю, что для вашего текстового поля также потребуется ввести только числовое число. В противном случае обращение с null не будет пуленевым доказательством того, что кто-то вводит не числовые. Должны быть какие-то маскировки, обработчик событий или валидация, которые вы создали для него. Как создать собственный NumTextBox, который наследует от TextBox с поведением ограничения ввода, который у вас уже есть, и переопределить свойство Text или создать новый вызов свойств. Значение, которое отслеживает все конверсии и последовательно возвращает соответствующее значение через вашу систему.

+0

Это отличная идея, хотя это слишком много для такой простой вещи. – Tomasi

+0

Или маскированное текстовое поле уже ограничивает входные значения – benPearce

+0

Серьезно, overkill. Вы можете подключить валидатор к «нормальному» текстовому блоку намного проще, чем создавать свой собственный подкласс и пытаться его использовать. – Coderer

0

попробовать это

Sub MyFunction(ByVal Param1Integer as Integer) 
    ' Do Something 
    End Sub 

    Sub MyFunction(ByVal Param1String as String) 
    MyFunction(Val(Param1String)) 
    End Sub 

Предполагается, что пустая строка такая же, как 0.

0

Вы смотрели в использовании NumericUpDown (контроль отжима)? Он имеет член .Value (всегда действительный Integer!) Вместо того, чтобы преобразовать из String. Вы можете ограничить верхнее и нижнее значения, а также установить значение по умолчанию.

0

Я бы просто использовать встроенный IF оператор (VB):

MyFunction(IIf(txtTextBox.Text Is Nothing, "", txtTextBox.Text)) 
Смежные вопросы