VB.NET到C#禁用字符数组
我在VB.NET中有这个禁用字符数组。如何转换它 原始VB.NET禁用字符:VB.NET到C#禁用字符数组,c#,vb.net,character,special-characters,C#,Vb.net,Character,Special Characters,我在VB.NET中有这个禁用字符数组。如何转换它 原始VB.NET禁用字符: Public BannedChars() As String = New String() {" ", ",", ".", ";", "/", "\", "!", """", "(", ")", "£", "$", "%", "^", "&", "*", "{", "}", "[", "]", "@", "#", "'", "~", "<", ">", "?", "+", "=", "-", "|"
Public BannedChars() As String = New String() {" ", ",", ".", ";", "/", "\", "!", """", "(", ")", "£", "$", "%", "^", "&", "*", "{", "}", "[", "]", "@", "#", "'", "~", "<", ">", "?", "+", "=", "-", "|", "¬", "`"}
public string BannedChars = new string(new char[] {
' ', ',', '.', ';', '/', '\\', '!', '\'', '(', ')', '£', '$',
'%', '^', '&', '*', '{', '}', '[', ']', '@', '#', '"',
'~', '<', '>', '?', '+', '=', '-', '|', '¬', '`'});
有什么帮助吗!
谢谢
你的问题很模糊。如果需要字符数组,请使用字符
,而不是字符串
类型:
public char[] BannedChars = new char[] {
' ', ',', '.', ';', '/', '\\', '!', '\'', '(', ')', '£', '$',
'%', '^', '&', '*', '{', '}', '[', ']', '@', '#', '"',
'~', '<', '>', '?', '+', '=', '-', '|', '¬', '`'};
如果需要单个字符串(可以视为只读字符数组):
编辑:如果要检查字符串是否包含任何禁用字符,我建议使用HashSet
而不是数组:
// 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...
}
//静态:您只有一组被禁止的字符,不是吗?
public static readonly HashSet BannedChars=new HashSet(){
' ', ',', '.', ';', '/', '\\', '!', '\'', '(', ')', '£', '$',
'%', '^', '&', '*', '{', '}', '[', ']', '@', '#', '"',
'~', '', '?', '+', '=', '-', '|', '¬', '`'
};
...
string Mytext=@“一些包含许多字符的字符串:'a','b';这是可以禁止的……”;
if(MyText.Any(c=>BannedChars.Contains(c))){
//至少发现了一个被禁止的字符。。。
}
我在这里可以相当清楚地看到这个问题,但情况可能并非总是如此,因此请在将来提供更好的描述
在这种情况下,转义才是问题所在。在VB中,双引号是唯一需要在文本字符串中转义的字符,这是用另一个双引号完成的。C#支持许多转义序列,反斜杠是转义字符。这意味着用反斜杠转义双引号,还需要转义用另一个反斜杠反斜杠,例如
string[] arr = new[] {"\\", "\""};
我认为这应该能解决您的问题,但我们会看看在修复后是否会出现其他问题。C#使用小写关键字,因此将Public
更改为Public
,将New
更改为New
C#将类型放在变量之前,而不是As
子句,因此将As
删除,并将String
移动到BannedChars
之前
C使用方括号代替括号表示数组,因此将()
替换为[]
C#将声明的数组类型放在类型内,而不是放在变量之后(传统VB),因此将[]
放在字符串之后
C#允许省略数组初始值设定项的基类型,而不是像VB那样要求整个类型或连同new
关键字一起省略它,因此从初始值设定项中删除String
C#字符串文字有多种形式。与VB最接近的称为逐字字符串,它们用@
打开,用“
关闭,并像VB一样,用stutter for literal”关闭,所以在每次打开@
之前都要放@
C#用分号终止语句,而VB不使用分号(这是最简单的说法),因此添加一个;
public String[] BannedChars = new [] {
@" ", @",", @".", @";", @"/", @"\", @"!", @"""", @"(", @")",
@"£", @"$", @"%", @"^", @"&", @"*", @"{", @"}", @"[", @"]",
@"@", @"#", @"'", @"~", @"<", @">", @"?", @"+", @"=", @"-",
@"|", @"¬", @"`" };
public String[]BannedChars=new[]{
@" ", @",", @".", @";", @"/", @"\", @"!", @"""", @"(", @")",
@"£", @"$", @"%", @"^", @"&", @"*", @"{", @"}", @"[", @"]",
@"@", @"#", @"'", @"~", @"", @"?", @"+", @"=", @"-",
@"|", @"¬", @"`" };
.NET数据类型(适用于Java、JavaScript等)
至于什么是字符:String
可以容纳零个或多个字符。Char
可以容纳一个字符、半个字符甚至更少。Char
是一个UTF-16代码单元。String
是一个计数序列UTF-16代码单元。一个或两个UTF-16代码单元代表一个Unicode码点。一个字组是一个基c的序列odepoint后跟一系列组合的代码点。文本呈现显示图形集簇;用户称它们为字符。一些代码点是“组合的”“如中所述,它们旨在表示与具有特定组合码点的不同基本码点相同的事情。这使得比较字符串相当困难。因此,Unicode库提供了用于组合或分解“组合”码点的规范化函数
因此,字符串数组似乎是代码的一个不错的选择,特别是因为原始代码就是这样使用的。说它不起作用是不够的。您有义务向我们提供一个完整和清晰的解释,说明您试图实现的目标、您试图实现目标的方式以及您尝试时发生的情况。不要偷懒于你的描述,期望我们猜测或假设你已经知道的。哦,对不起!我还没有检查这个主题底部是否缺少一些文本!!等等,我将更新…我如何用字符串特殊字符表示?老实说,我倾向于这样做:var bannedChars=@“,.;/\!”“()”。tocharray()代码>。使用逐字字符串文字(带有@
前缀)意味着字符串不包含转义序列,因此反斜杠只是一个常规字符,唯一需要的转义是VB样式的双引号。使用字符串
意味着它比所有数组元素更具可读性,并且您还可以使用字符
数组,这可能更合适。谢谢!但很抱歉,底部遗漏了文本!谢谢我同意使用char
/char
比使用string
/string
更好。可能需要对使用数组的代码进行一两次更改,但这可能会使代码更加正确。例如,测试字符串
是否包含任何非法字符就像if(myString.any(ch=>BannedChars.contains(ch))
一样简单。
public string[] BannedChars = new string[] {
" ", ",", ".", ";", "/", "\\", "!", "'", "(", ")", "£", "$",
"%", "^", "&", "*", "{", "}", "[", "]", "@", "#", "\"",
"~", "<", ">", "?", "+", "=", "-", "|", "¬", "`"});
"\\", "\""
// 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...
}
string[] arr = new[] {"\\", "\""};
public String[] BannedChars = new [] {
@" ", @",", @".", @";", @"/", @"\", @"!", @"""", @"(", @")",
@"£", @"$", @"%", @"^", @"&", @"*", @"{", @"}", @"[", @"]",
@"@", @"#", @"'", @"~", @"<", @">", @"?", @"+", @"=", @"-",
@"|", @"¬", @"`" };