Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Как в VB задать тип данных,чтобы переменная могла


Автор: JaguarSmith 14.12.2005, 17:16
smile Доброе время суток!

smile Как в VB задать тип данных ,чтобы переменная этого типа могла принимать одно из нескольких заранее заданных значений?

в structure нужно чтоб была хотяб одна переменная...
Я попробовал так - но это не совсем то...

Код

Public Class dType

        Public Const _blob As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Blob
        Public Const _byte As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Byte
        Public Const _date As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Date
        Public Const _datetime As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Datetime
        Public Const _decimal As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Decimal
        Public Const _double As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Double
        Public Const _enum As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Enum
        Public Const _float As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Float
        Public Const _geometry As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Geometry
        Public Const _int16 As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Int16
        Public Const _int24 As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Int24
        Public Const _int32 As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Int32
        Public Const _int64 As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Int64
        Public Const _longblob As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.LongBlob
        Public Const _mediumblob As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.MediumBlob
        Public Const _newdate As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Newdate
        Public Const _set As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Set
        Public Const _string As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.String
        Public Const _time As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Time
        Public Const _timestamp As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Timestamp
        Public Const _tinyblob As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.TinyBlob
        Public Const _varchar As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.VarChar
        Public Const _year As MySql.Data.MySqlClient.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.Year

    End Class

Автор: arilou 14.12.2005, 17:24
JaguarSmith
А что, тебе надо чтобы типизировано было? Можно же по простому:

Код

dim vv as object = "string"
if vv.gettype().equals(getttype(string)) then
  dim sval as string = ctype(vv, string)
end if


Для этого можно класс написать свой.

Автор: JaguarSmith 14.12.2005, 21:09
Ну в данном конкретном случае идея сводилось к тому, чтобы заменить длинные и неудобные "MySql.Data.MySqlClient.MySqlDbType" на что-то более приемлемое например, чтобы вместо MySql.Data.MySqlClient.MySqlDbType.Geometry писать _geometry.

Вот и подумал что может можно както сделать тип данных который имеет фиксированный набор значений сам VB ведь это сплош и рядом использует - когда пишешь:
Код

Dim n As MySql.Data.MySqlClient.MySqlDbType
n =

или
Код

Dim n As StringFormatFlags
n =


то после равно тебе предлагают выбрать один из вариантов которым может быть равно n

Я такое жы хочу! smile

Автор: Exception 14.12.2005, 23:12
А объявить Enum что тебе мешает?
Код

Enum Mysql
_geometry = blablabla.MySqlDBType.Geometry
_varchar = blablabla.MySqlDBType.VarChar
'blablabla...
End Enum
'юзаем
Dim mytype As Mysql = 'тута раскроется список

Кстати, с Option Strict On компилер будет тебя матом крыть, так что используй CType.

Автор: JaguarSmith 15.12.2005, 01:22
smile Во-во я какраз это и имел ввиду тока не знал что это Enum называется!

СПАСИБО!!!

Зы. Судя по тому, что я не был жестоко покрыт матом со стороны компиллера Option Strict - у меня Off smile

Автор: Exception 15.12.2005, 09:38
На самом деле, лучше его включить. Неявное приведение типов -- зло, ибо могут возникнуть ошибки в рантайме.

Автор: arilou 15.12.2005, 12:35
JaguarSmith
smile я тебя не понял

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)