2011-06-17 110 views
4

我正在使用vb.net 2010,嘗試使用數據庫中的T4使用屬性生成簡單的類。有時我得到一個錯誤,認爲某個字符串不是有效的屬性名稱,因爲它是一個vb關鍵字。例如,基於數據庫數據,我的T4試圖創建一個名爲「屬性」的屬性的類。有效的屬性名稱檢查器

是否有檢查字符串是否是一個關鍵字,像函數:

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

回答

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 
1

基於我所讀到的一切,關鍵字是編譯器的一部分,沒有方法,你可以用它來檢查他們內置,因爲他們沒有暴露。

它會出現在這種情況下,你堅持使用已知的關鍵字列表來建立自己的檢查。

+0

看起來,你是對的,但我在等待,也許有人有一些竅門。 – 2011-06-17 11:39:13

+0

這會很方便。我自己在一年前跑了這個。 – Jay 2011-06-17 11:51:19

3

通過將關鍵字放入[…],可以將關鍵字轉換爲VB中的有效標識符。你可以在這裏爲每個標識符做這件事,以防止名稱衝突。例如,下面的代碼編譯:

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

給出

Class [As] 
End Class 

Class [New] : Inherits [As] 
End Class