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