Допустимая проверка имени свойства - PullRequest
4 голосов
/ 17 июня 2011

Я использую vb.net 2010, пытаюсь сгенерировать простые классы со свойствами, используя T4 из базы данных.Иногда я получаю сообщение об ошибке, что какая-то строка не является допустимым именем свойства, потому что это ключевое слово vb.Например, на основе данных базы данных мой T4 пытался создать класс со свойством под названием «property».

Существует ли функция, которая проверяет, является ли строка ключевым словом, например:

dim a = "property"
if iskeyword(a) then
    a &= "1"
end if

Ответы [ 3 ]

3 голосов
/ 17 июня 2011

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

Dim [Dim] As [As] = New [New]()

данный

Class [As]
End Class

Class [New] : Inherits [As]
End Class
1 голос
/ 17 июня 2011

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

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

0 голосов
/ 17 июня 2011

Точно так же, как сказал @D, похоже, я должен создать его сам:

Function IsKeyWord(name As String) As Boolean
    Dim keywords As New List(Of String) From {
        "addhandler", "addressof", "alias", "and", "andalso", "as",
        "boolean", "byref", "byte", "byval", "call", "case", "catch", "cbool",
        "cbyte", "cchar", "cdate", "cdec", "cdbl", "char", "cint", "class",
        "clng", "cobj", "const", "continue", "csbyte", "cshort", "csng",
        "cstr", "ctype", "cuint", "culng", "cushort", "date", "decimal",
        "declare", "default", "delegate", "dim", "directcast", "do", "double",
        "each", "else", "elseif", "end", "endif", "enum", "erase", "error",
        "event", "exit", "false", "finally", "for", "friend", "function",
        "get", "gettype", "getxmlnamespace", "global", "gosub", "goto",
        "handles", "if", "implements", "imports", "in", "inherits", "integer",
        "interface", "is", "isnot", "let", "lib", "like", "long", "loop", "me",
        "mod", "module", "mustinherit", "mustoverride", "mybase", "myclass",
        "namespace", "narrowing", "new", "next", "not", "nothing",
        "notinheritable", "notoverridable", "object", "of", "on", "operator",
        "option", "optional", "or", "orelse", "overloads", "overridable",
        "overrides", "paramarray", "partial", "private", "property",
        "protected", "public", "raiseevent", "readonly", "redim", "rem",
        "removehandler", "resume", "return", "sbyte", "select", "set",
        "shadows", "shared", "short", "single", "static", "step", "stop",
        "string", "structure", "sub", "synclock", "then", "throw", "to",
        "true", "try", "trycast", "typeof", "variant", "wend", "uinteger",
        "ulong", "ushort", "using", "when", "while", "widening", "with",
        "withevents", "writeonly", "xor"}
    Return keywords.Contains(name.Trim.ToLower)
End Function
...