这篇文章主要讲解了“c#中的string是不能修改的吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c#中的string是不能修改的吗”吧!
这个问题,应该不是问题吧!在C#中string是不可修改的,语法都是这么说的。但我今天想变通一种方式将原始的string内容修改,思路如下:
c++:
void editstring(wchar_t * ptr) { wchar_t* pc = ptr; int index = 0; int len = _tcslen(ptr);//因为C#中传过来的是unicode字符,所以strlen只能==1 while (index < len) { if (*pc != 0) { *pc = *pc + 1; pc++; } index++; } }
c#中:注意:因为c#用的字符串是unicode,比如'a'-->0x00 0x41 ,而不是普通C++中的char,必须要是wchar_t,但我在C#中无法用wchar_t,只能用char
[Dllimport.....] public static unsafe extern editstring(char* ptr); string msg = "abc"; unsafe { fixed(char *pmsg = msg) { editstring(pmsg); } } Console.WriteLine("msg=" + msg);
实验显示如下:
msg=bcd
说明实验成功。
上面做法是使用了fixed语句,那能不能不用fixed达到同样的目的呢?
C++代码不用变,只需要变C#代码:
[DllImport("dllfordebugdemo.dll", EntryPoint = "editstring", CallingConvention = CallingConvention.Cdecl)] public static extern void editstring(IntPtr ptr); string msg = "abc"; unsafe { fixed(char *pmsg = msg) { IntPtr pm = (IntPtr)pmsg; editstring2(pm); } } Console.WriteLine("msg=" + msg);
最终实验也成功了。
感谢各位的阅读,以上就是“c#中的string是不能修改的吗”的内容了,经过本文的学习后,相信大家对c#中的string是不能修改的吗这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。