有效的属性名称检查器

时间:2011-06-17 10:47:27

标签: vb.net t4

我正在使用vb.net 2010,尝试使用数据库中的T4生成包含属性的简单类。有时我得到一个错误,一些字符串不是有效的属性名称,因为它是一个vb关键字。例如,基于数据库数据,我的T4尝试使用名为“property”的属性创建一个类。

是否有检查字符串是否为关键字的函数,如:

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

3 个答案:

答案 0 :(得分:3)

通过将关键字放入[…],可以将关键字制作成VB中的有效标识符。您可以在此处为每个标识符执行此操作,以防止名称冲突。例如,以下代码编译:

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

给定的

Class [As]
End Class

Class [New] : Inherits [As]
End Class

答案 1 :(得分:1)

根据我读过的所有内容,关键字是编译器的一部分,没有任何方法可以用来检查内置的内容,因为它们没有公开。

在这种情况下,您可能会使用已知的关键字列表来构建自己的支票。

答案 2 :(得分:0)

就像@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