Tom*_*ski 61 c# class naming-conventions
允许哪些字符以及C#类名称中不允许的内容?能否请你帮忙?
编辑:指定.允许哪些特殊字符?请具体说明,因为高技术语言的50页规格链接不是一个对我有帮助的答案.
解释:我试图完成的是将类名划分为可区分的部分,例如:
class Person @ WorkOffice @ Helper @ Class
{
}
我想到了一种使用某种角色或其他东西来从这个类名中获取Part,WorkOffice,Helper和Class的方法.
是的,我知道这很疯狂,但我需要这样.我知道我可以使用属性和反射将这些数据存储在类meta中,但事实并非如此,所以请不要建议这个解决方案.
the*_*oop 67
规格细节在这里.基本上,字符类 Lu,Ll,Lt,Lm,Lo,N1,Mn,Mc,Nd,Pc和Cf中的任何unicode字符(包括unicode转义).第一个字符是一个例外,它必须是一个字母(Lu,Ll,Lt,Lm或Lo类)或下划线.此外,如果标识符是关键字,则必须在其前面加上@.否则,@是可选的.
asg*_*las 14
Unicode类别可以在这里找到:http://www.dpawson.co.uk/xsl/rev2/UnicodeCategories.html
从那里你可以从组中挑选大多数东西(从规范,其他人也正确指出):
Lu,Ll,Lt,Lm,Lo,Nl,Mn,Mc,Nd,Pc,Cf
请注意,Visual Studio(或者它是Resharper)不一定非常喜欢它们,但是大多数它们都会编译.以30FB KATAKANA MIDDLE DOT为例.编译很好,但它不适合IDE.但这个奇怪的东西FE34演示形式垂直波浪低线工作得很好.
这是一个工作正常的分离器:
class Person?WorkOffice?Helper?Class
{
}
Run Code Online (Sandbox Code Playgroud)
我并不是说我建议使用奇怪的字符.但对于特殊场合,这似乎是:)
编辑:请注意,规范说它允许Unicode 3.0中的字符.我忽略了这一点,并想知道为什么很多人物都不会工作,尽管他们来自正确的群体.查看此问题了解详情.
根据现有答案中分类的字符,您可以使用以下扩展方法检查字符:
public static bool IsValidInIdentifier(this char c, bool firstChar = true)
{
switch (char.GetUnicodeCategory(c))
{
case UnicodeCategory.UppercaseLetter:
case UnicodeCategory.LowercaseLetter:
case UnicodeCategory.TitlecaseLetter:
case UnicodeCategory.ModifierLetter:
case UnicodeCategory.OtherLetter:
// Always allowed in C# identifiers
return true;
case UnicodeCategory.LetterNumber:
case UnicodeCategory.NonSpacingMark:
case UnicodeCategory.SpacingCombiningMark:
case UnicodeCategory.DecimalDigitNumber:
case UnicodeCategory.ConnectorPunctuation:
case UnicodeCategory.Format:
// Only allowed after first char
return !firstChar;
default:
return false;
}
}
Run Code Online (Sandbox Code Playgroud)