Большая часть нашей разработки выполняется в vb.net(а не на моем выборе), и один часто используемый шаблон кода использует "On Error GoTo", за которым следует "Продолжить", чтобы все поля базы данных можно было читать с помощью DirectCast ( ) и любые значения DBNull просто игнорируются.
Текущий код будет
On Error GoTo error_code
oObject.Name = DirectCast(oReader.Item("Name"), String)
oObject.Value = DirectCast(oReader.Item("Value"), Integer)
error_code:
Resume Next
Код С#, чтобы заменить это, включить удаление кода On Error будет
oObject.Name = oReader["Name"] as string ?? string.Empty;
oObject.Value = oReader["Value"] as int? ?? -1;
Проблема заключается в том, что ebivelent vb.net этого С# -кода использует TryCast(), который может использоваться только для ссылочных типов (типы с нулевым значением - типы значений), в то время как ключевое слово С# как ключевое слово может использоваться для ссылочных и нулевых типов.
Итак, у кого-нибудь есть пример кода vb.net, который делает то же самое, что и код С# в одной строке в поле базы данных?
-Edit -
Я решил, что я считаю лучшим решением в нашем случае. Методы помощников не подходят (из-за управления), и мы не можем использовать методы расширения, так как мы используем только .NET 2.0 (хотя с VS 2008, поэтому мы получаем If())
oObject.Name = If(oReader.IsDBNull(oReader.GetOrdinal("Name")), String.Empty, oReader.GetString(oReader.GetOrdinal("Name")))
oObject.Value = If(oReader.IsDBNull(oReader.GetOrdinal("Value")), 0, oReader.GetInt32(oReader.GetOrdinal("Value")))