C#中没有等价的函数。
如果按照Microsoft.VisualBasic.dll
的StrConv
的源代码,你会看到它实际上是P /调用LCMapString
内部类似answer you linked。
如果你不想引用Microsoft.VisualBasic.dll
,你可以换的的P/Invoke到C#编写的,像这样一个辅助类或服务...
// NOTE: CODE NOT TESTED
// Code from John Estropia's StackOverflow answer
// https://stackoverflow.com/questions/6434377/converting-zenkaku-characters-to-hankaku-and-vice-versa-in-c-sharp
public static class StringWidthHelper
{
private const uint LOCALE_SYSTEM_DEFAULT = 0x0800;
private const uint LCMAP_HALFWIDTH = 0x00400000;
private const uint LCMAP_FULLWIDTH = 0x00800000;
public static string ToHalfWidth(string fullWidth)
{
StringBuilder sb = new StringBuilder(256);
LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_HALFWIDTH, fullWidth, -1, sb, sb.Capacity);
return sb.ToString();
}
public static string ToFullWidth(string halfWidth)
{
StringBuilder sb = new StringBuilder(256);
LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_FULLWIDTH, halfWidth, -1, sb, sb.Capacity);
return sb.ToString();
}
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
private static extern int LCMapString(uint Locale, uint dwMapFlags, string lpSrcStr, int cchSrc, StringBuilder lpDestStr, int cchDest);
}
否则,您可以建立一个字典充当查找表。
我不认为有这样的事情“标准的C#功能”。 AFAIK对'Microsoft.VisualBasic'的引用与引用添加到C#项目的'Microsoft.CSharp'一样正常。也许这可以帮助http://stackoverflow.com/questions/25149458/convert-fullwidth-to-halfwidth。我个人将对Microsoft.VisualBasic的引用添加到几乎所有的C#项目中,因为C#在习惯VB之后可能会感觉有点欠缺。 – Slai
谢谢Slai。通过标准的C#函数,我的意思是常见的'System.xxx'.Net函数。在习惯了VB之后,你可能会觉得C#有点欠缺。但不幸的是,我不知道VB.I更喜欢C#.Net,并且对于某些真正老的和持续的项目,C++ MFC。它确实是StrConv完成了工作,但我不喜欢include部分中的'Microsoft.VisualBasic',我对它提供的功能没有任何想法,所以我想删除它可能。 – PRinCEKtd