代码之家  ›  专栏  ›  技术社区  ›  Cristian Capannini

VB。NET到C#禁用字符数组

  •  -1
  • Cristian Capannini  · 技术社区  · 8 年前

    我在VB中有这个禁用字符数组。NET如何转换它?

    原始VB。网络禁止字符:

    Public BannedChars() As String = New String() {" ", ",", ".", ";", "/", "\", "!", """", "(", ")", "£", "$", "%", "^", "&", "*", "{", "}", "[", "]", "@", "#", "'", "~", "<", ">", "?", "+", "=", "-", "|", "¬", "`"}
    

    尝试了C#禁止的字符,但无效:

    public string[] BannedChars = new string[] {" ", ",", ".", ";", "/", "\", "!", """", "(", ")", "£", "$", " % ", " ^ ", " & ", " * ", "{ ", "}", "[", "]", "@", "#", "'", "~", "<", ">", "?", "+", "=", "-", "|", "¬", "`"};
    

    错误:

    CS1003  C# Syntax error, ',' expected
    
    CS0623  C# Array initializers can only be used in a variable or field initializer. Try using a new expression instead.
    
    CS0023  C# Operator '!' cannot be applied to operand of type 'string'
    
    CS1056  C# Unexpected character '£'
    
    CS0019  C# Operator '%' cannot be applied to operands of type 'string' and 'string'
    
    CS0019  C# Operator '*' cannot be applied to operands of type 'string' and 'string'
    

    任何帮助都适用! 谢谢 C

    3 回复  |  直到 8 年前
        1
  •  2
  •   Dmitrii Bychenko    8 年前

    你的问题是 模糊的 一如果需要数组 角色 使用 char string 类型:

      public char[] BannedChars = new char[] {
        ' ', ',', '.', ';', '/', '\\', '!', '\'', '(', ')', '£', '$', 
        '%', '^', '&', '*', '{', '}', '[', ']', '@', '#', '"', 
        '~', '<', '>', '?', '+', '=', '-', '|', '¬', '`'};
    

    擒纵机构 另一个问题是:在C中,我们使用 \ 为此:

        '\\', '\''
    

    如果你想要一个 一串 (可以将其视为只读字符数组):

     public string BannedChars = new string(new char[] {
        ' ', ',', '.', ';', '/', '\\', '!', '\'', '(', ')', '£', '$', 
        '%', '^', '&', '*', '{', '}', '[', ']', '@', '#', '"', 
        '~', '<', '>', '?', '+', '=', '-', '|', '¬', '`'});
    

    最后,如果你愿意 字符串数组 :

     public string[] BannedChars = new string[] {
        " ", ",", ".", ";", "/", "\\", "!", "'", "(", ")", "£", "$", 
        "%", "^", "&", "*", "{", "}", "[", "]", "@", "#", "\"", 
        "~", "<", ">", "?", "+", "=", "-", "|", "¬", "`"});
    

    请再次注意转义(例如,我们不重复转义报价:不 """" 但是 "\"" ):

     "\\", "\""
    

    编辑: 如果要检查字符串是否包含任何禁用字符,我建议使用 HashSet<char> 代替阵列:

     // static : you have just one set of banned char, don't you?
     public static readonly HashSet<char> BannedChars = new HashSet<char>() {
        ' ', ',', '.', ';', '/', '\\', '!', '\'', '(', ')', '£', '$', 
        '%', '^', '&', '*', '{', '}', '[', ']', '@', '#', '"', 
        '~', '<', '>', '?', '+', '=', '-', '|', '¬', '`' 
     }; 
    
     ...
    
     string Mytext = @"some string with many characters: 'a', 'b'; which can be banned...";
    
     if (MyText.Any(c => BannedChars.Contains(c))) {
       // At least one Banned char has been found...
     }
    
        2
  •  2
  •   jmcilhinney    8 年前

    我在这里可以很清楚地看到这个问题,但情况可能并不总是这样,因此请在将来提供更好的描述。

    在这种情况下,逃逸才是问题所在。在VB中,双引号是唯一需要在文本字符串中转义的字符,这是用另一个双引号完成的。C#支持许多转义序列,反斜杠是转义字符。这意味着您需要用反斜杠转义双引号,还需要用另一个反斜杠转义反斜杠,例如。

    string[] arr = new[] {"\\", "\""};
    

    我认为这应该会解决你的问题,但我们会看看在修复后是否会出现其他问题。

        3
  •  1
  •   Tom Blodget    8 年前

    C#使用小写关键字,因此更改 Public public New new

    C#将类型置于变量之前,而不是 As 子句,因此删除 然后移动 String 之前 BannedChars

    C#对数组使用方括号而不是括号,因此替换 () 具有 []

    C#puts声明数组类型时,括号在类型内,而不是在变量(旧VB)之后,因此put [] 之后 一串

    C#允许省略数组初始值设定项的基类型,而不需要整个类型或将其与 关键字,因此删除 一串 来自初始值设定项。

    C#字符串文字有多种形式。最接近VB的称为逐字字符串,它们是用 @" 并以 " “就像VB一样,所以把 @ 每次开放前 “”

    C#用分号终止语句,而VB不用分号终止语句(这是最简单的说法),因此在 ;

    public String[] BannedChars = new [] {
        @" ", @",", @".", @";", @"/", @"\", @"!", @"""", @"(", @")", 
        @"£", @"$", @"%", @"^", @"&", @"*", @"{", @"}", @"[", @"]", 
        @"@", @"#", @"'", @"~", @"<", @">", @"?", @"+", @"=", @"-", 
        @"|", @"¬", @"`" };
    

    。NET数据类型(适用于Java、JavaScript)

    关于什么是角色: 一串 包含零个或多个字符。 Char 保存一个字符,一半甚至更少。 烧焦 是UTF-16代码单元。 一串 是计数序列UTF-16代码单元。一个或两个UTF-16代码单元表示一个Unicode码点。图位簇是一个基本码点序列,后跟一个组合码点序列。文本渲染显示图形集簇;用户称之为字符。一些代码点是“组合”的,因为它们旨在表示与具有特定组合代码点的不同基本代码点相同的内容。这使得比较字符串相当困难。因此,Unicode库提供了规范化函数来组合或分解“组合”代码点。

    因此,字符串数组对于您的代码来说似乎是一个不错的选择,尤其是因为原始代码就是这样使用的。