2010-07-12 7 views
2

Ниже приведен фрагмент из VB, который я переношу на перезапись C#. Мой вопрос: receipt_date после задания? Это все еще object или это string?Корректный аналог преобразования C# для CTYPE VB()

Dim receipt_date As Object 
receipt_date = CType(dr.Item("RECTDT"), String) 

Будет ли это правильным аналогом C#?

object receipt_date; 
receipt_date = dr["RECTDT"].ToString(); 

После обоих этих казнить бы VB версия, receipt_date быть равна версии C#? Если нет, что мне нужно сделать, чтобы сделать это? Спасибо

+1

Вы понимаете, что ваш код VB.NET присваивается 'String', а затем возвращается к' Object', правильно? – Randolpho

+0

@ Randolpho: Нет, его код VB.NET присваивается 'String' и присваивает это значение переменной' Object'; это не актерский состав. –

ответ

7

Да, вы получите тот же результат. Он семантически отличается от версии VB (вы вызываете ToString() явно, а не используете CType, что явно эквивалентно листингу на C#), но он функционально идентичен. Это также более безопасно, поскольку при запуске нулевого значения в базе данных (которое должно быть DBNull во время выполнения) генерирует исключение.

Просто ради того, чтобы быть всеобъемлющей, хотя, фактический C# аналог будет таким:

var receipt_date = (string)dr["RECTDT"]; 

В качестве отправной точки стиля, хотя, старайтесь избегать неявной типизации (то есть, используя var ключевое слово вместо из string или int) для простых типов. var полезен, когда тип может измениться в будущем (и это не важно), или если тип длинный и/или сложный, и var делает его более читаемым. В этом случае, я хотел бы предложить: CType ключевое слово

string receipt_date = (string)dr["RECTDT"]; 
+0

Я буду +1, если вы не согласитесь с тем, когда использовать 'var'. Научитесь любить 'var'. – Randolpho

+0

@ Randolpho: Это вопрос стиля; там было много дискуссий об этом на SO. Ни один из способов не является правильным в любом техническом смысле. –

+0

@ Адам Робинсон: См. Раздел «Редактировать для моего промаха». Я не писал часть VB, и я пытаюсь выяснить, что ** TYPE ** 'receipt_date' после присвоения ему значения. Это делает его строкой? Я не знаком с VB, поэтому я осторожно отношусь к тому, что делает CTYPE. –

2

VB является более или менее эквивалентно Convert.ToString, хотя и не точно такой же.

Так следующее в VB ...

Dim receipt_date As Object 
receipt_date = CType(dr.Item("RECTDT"), String) 

... было бы лучше (или наиболее близко) переведены на следующее C#.

object receipt_date; 
receipt_date = Convert.ToString(dr.Item["RECTDT"]); 

Кстати CType(..., String) компилируется в Microsoft.VisualBasic.CompilerServices.Conversions.ToString.

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