我正在使用vb.net 2010,嘗試使用數據庫中的T4使用屬性生成簡單的類。有時我得到一個錯誤,認爲某個字符串不是有效的屬性名稱,因爲它是一個vb關鍵字。例如,基於數據庫數據,我的T4試圖創建一個名爲「屬性」的屬性的類。有效的屬性名稱檢查器
是否有檢查字符串是否是一個關鍵字,像函數:
dim a = "property"
if iskeyword(a) then
a &= "1"
end if
我正在使用vb.net 2010,嘗試使用數據庫中的T4使用屬性生成簡單的類。有時我得到一個錯誤,認爲某個字符串不是有效的屬性名稱,因爲它是一個vb關鍵字。例如,基於數據庫數據,我的T4試圖創建一個名爲「屬性」的屬性的類。有效的屬性名稱檢查器
是否有檢查字符串是否是一個關鍵字,像函數:
dim a = "property"
if iskeyword(a) then
a &= "1"
end if
就像@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
基於我所讀到的一切,關鍵字是編譯器的一部分,沒有方法,你可以用它來檢查他們內置,因爲他們沒有暴露。
它會出現在這種情況下,你堅持使用已知的關鍵字列表來建立自己的檢查。
通過將關鍵字放入[…]
,可以將關鍵字轉換爲VB中的有效標識符。你可以在這裏爲每個標識符做這件事,以防止名稱衝突。例如,下面的代碼編譯:
Dim [Dim] As [As] = New [New]()
給出
Class [As]
End Class
Class [New] : Inherits [As]
End Class
看起來,你是對的,但我在等待,也許有人有一些竅門。 – 2011-06-17 11:39:13
這會很方便。我自己在一年前跑了這個。 – Jay 2011-06-17 11:51:19