这篇文章主要讲解了“c#中的string是不能修改的吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c#中的string是不能修改的吗”吧!
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都网站建设、外贸营销网站建设、井陉网络推广、微信小程序开发、井陉网络营销、井陉企业策划、井陉品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供井陉建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
这个问题,应该不是问题吧!在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是不能修改的吗这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!