我正在使用vb.net 2010,尝试使用数据库中的T4生成包含属性的简单类。有时我得到一个错误,一些字符串不是有效的属性名称,因为它是一个vb关键字。例如,基于数据库数据,我的T4尝试使用名为“property”的属性创建一个类。
是否有检查字符串是否为关键字的函数,如:
dim a = "property"
if iskeyword(a) then
a &= "1"
end if
答案 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