jjzjj

来自 Int 的 C# Char 用作 String - VB Chr() 的真正等价物

coder 2024-05-31 原文

我正在努力为我的问题找到一个明确的答案,它与网站上的任何其他问题重复。我已经在 SO 和其他几个网站上阅读了许多关于此的帖子和相关问题。例如这个是关键答案(许多其他人被标记为重复并重定向到这个):What's the equivalent of VB's Asc() and Chr() functions in C#?

我正在将 VBA 宏转换为 C#。在 VBA 中 chr(7) 可以简单地连接到一个 string 就好像 chr() 会产生一个 string。为什么这不能用 C# 完成?

不幸的是,答案并不明确,他们多次声明这是正确的用法:

string mystring=(char)7;

但它给了我一个编译器错误,因为它没有作为字符串求值。

我不得不用它来让它工作:

string mystring=((char)7).ToString();

这相当于 VB Chr() 函数,实际上是因为 VB 中的 Chr() 计算为字符串。

我的问题是:我是否总是需要将 char 显式转换为 string 还是在某些情况下隐式转换?

更新:

根据@Dirk 的回答,这也有效:

string mystring = "" + (char)7;

这并没有减少我的神秘感。如果连接有效,为什么没有隐式转换??

我想获得有关 VB Chr() 及其在 C# 中的等效项之间区别的完整解释。我将不胜感激任何我可以阅读的引用资料,甚至示例也可以。提前致谢。

最佳答案

您正在用这个问题打开潘多拉魔盒。 Chr() 是 VB.NET 中的遗留函数,任何现代代码都应该改用 ChrW()。区别在于字符值的解释方式,ChrW() 假定字符代码是 Unicode(W = 宽)。 Chr() 将时钟回拨到上个世纪,这是一个没有 Unicode 的石器时代,其中字符要么是 ASCII 字符集 (0..127),要么是“扩展”字符 (128..255)。扩展字符属于代码页。许多不同的代码页被共同使用。一个非常重大的灾难,程序无法正确解释由位于不同国家的另一台机器生成的文本。甚至在同一个国家,日本也有多个通用代码页,但没有一个占主导地位。生产 mojibake .

我假设您指的是 ChrW(),没有人喜欢 mojibake。也不是 C#。使用 Char.ToString() 很好,替代方法是使用 string constructor需要一个char:

  string mystring = new string((char)7, 1);

或者您可能更喜欢的更通用的形式:

  public static string ChrW(int code) {
      return new string((char)code, 1);
  }

这不是唯一的方法,使用文字也是可能的,并且可能是您比辅助方法更喜欢的方法。以及 C# 不需要像 Chr() 这样的辅助函数的基本原因。 ASCII 控制代码 7 是响铃字符,当您将其写入控制台时它会发出哔哔声,您可以为此使用转义符:

  string mystring = "\a";

不太好记,它来自 Unix。其他的是“\b”表示退格,“\t”表示制表符,“\r”表示回车,“\n”表示换行。删除控制台窗口中最后键入的字符的经典技巧是 Console.Write("\b\b");。应注意 Environment.NewLine 属性。这大约是您应该使用控制字符插入它的程度。

最后但并非最不重要的是,\U 和\u 说明符可让您对任何字符进行编码:

  string mystring = "\u0007";

示例中不明显,但\u 值需要是十六进制的。当您使用来自上层 Unicode 位平面的代码点时,需要\U。

关于来自 Int 的 C# Char 用作 String - VB Chr() 的真正等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36976240/

有关来自 Int 的 C# Char 用作 String - VB Chr() 的真正等价物的更多相关文章

  1. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  2. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  3. ruby - 从 String#split 返回的零长度字符串 - 2

    在Ruby1.9.3(可能还有更早的版本,不确定)中,我试图弄清楚为什么Ruby的String#split方法会给我某些结果。我得到的结果似乎与我的预期相反。这是一个例子:"abcabc".split("b")#=>["a","ca","c"]"abcabc".split("a")#=>["","bc","bc"]"abcabc".split("c")#=>["ab","ab"]在这里,第一个示例返回的正是我所期望的。但在第二个示例中,我很困惑为什么#split返回零长度字符串作为返回数组的第一个值。这是什么原因呢?这是我所期望的:"abcabc".split("a")#=>["bc"

  4. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  5. java - Java 的 StringReader 的 Ruby 等价物是什么? - 2

    在Java中,可以像这样从一个字符串创建一个IO流:Readerr=newStringReader("mytext");我希望能够在Ruby中做同样的事情,这样我就可以获取一个字符串并将其视为一个IO流。 最佳答案 r=StringIO.new("mytext")和here'sthedocumentation. 关于java-Java的StringReader的Ruby等价物是什么?,我们在StackOverflow上找到一个类似的问题: https://st

  6. ruby-on-rails - 我需要一个真正的 UNIX RoR 开发环境 - 2

    从一开始,我就是一个Windows高手。我从MS-DOS开始。我安装了Windows2.1以及此后的所有Windows。现在,我家里有10台不同的Windows机器在运行,从Windows7Ultimate到各种版本的WindowsServer。我还没有完成Windows8,也不想去那里。我在服务器和各种软件方面都有UNIX经验,但它并不是我的首选环境。但是,我想我正在转换。我试图假装使用Cygwin和MSYS在Windows下运行UNIX。我的目的是搭建一个开发环境。两者都让我失望了。我花了比开发更多的时间来解决一系列技术问题。这是NotAcceptable。到目前为止,我的Ruby

  7. ruby - 在 Ruby 中实现 to_int 和 to_str 的后果 - 2

    我haveaclass它公开了一个字符串值和一个int值(分别是命令输出和退出代码)。除了通过to_s和to_i公开它们之外,我还使用to_str和to_int,如下所示:classStatusdefto_s@outputendalias:to_str:to_sdefto_i@status.exitstatusendalias:to_int:to_iend我的想法是能够在尽可能多的情况下使用这个对象。将其强制转换为字符串或整数会增加可用性。例如,我可以将对象与字符串连接起来:a_string="Outputwas:"+results(我想用这个作为int强制转换的例子,但是Fixnum

  8. ruby - 如何在 Ruby 中将变量用作变量名? - 2

    我怎样才能使下面的代码工作,以便两个puts都显示1?video=[]name="video"name[0]=1putsname[0]#givesme1putsvideo[0]#givesmenil 最佳答案 您可以使用eval使其工作:eval"#{name}[0]=1"不过我强烈反对这样做。在大多数情况下,你认为你需要做类似的事情,你应该使用HashMap。喜欢:context={"video"=>[]}name="video"context[name][0]=1 关于ruby-如何

  9. ruby - ruby 中的同一个程序如何接受来自用户的输入以及命令行参数 - 2

    我的ruby​​脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes

  10. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

随机推荐