如何解决C#指针引用
| 有没有一种方法可以在c#中创建c ++样式指针?当我不知道它是哪个int时,我需要在多个地方设置int。 就像在C ++中一样,我会这样做:int *i;
if(cond0) i = &someint;
if(cond1) i = &otherint;
if(cond2) i = &thirdint;
if(cond3) *i = someval;
if(cond4) *i = otherval;
if(cond5) *i = thirdval;
如果我以c#风格执行此操作,则将需要9个ifs,并且我的程序有更多条件,因此不可行。
我想到了一些类似的价值:
int val;
if(cond3) val = someval;
if(cond4) val = otherval;
if(cond5) val = thirdval;
if(cond0) someint = val;
if(cond1) otherint = val;
if(cond2) thirdint = val;
但这是不可能的,因为cond3、4和5分散在程序中。
解决方法
是的,但是您必须将执行此操作的所有代码包装在不安全的块中。
或者,如果这是在方法中发生的,则您可以使用\'ref \'关键字通过引用传递参数。
这两个选项确实将解决方案限制在方法边界上。如果您要处理的事情比这更分散,那么在C#中最好尝试找到重新组织代码以使用较少全局状态的方法。
,是的,我用于Windows句柄的类型为IntPtr。
,这是C#指针的示例,它说明了它们的声明以及如何将它们包装在不安全的块中
另外,请参见《 C#编程指南-指针类型》
,我不确定您是否在问题中提供了足够的信息以给出正确的答案,但是一种可能的解决方案是使用ref参数在函数中设置值。
class Program
{
static void Main(string[] args)
{
var i = 1;
var someint = 2;
var otherint = 3;
var thirdint = 4;
Console.WriteLine(\"i: {0}\\nsomeint: {1}\\notherint: {2}\\nthirdint: {3}\",i,someint,otherint,thirdint);
SetInts(true,false,ref i,ref someint,ref otherint,ref thirdint);
Console.WriteLine(\"i: {0}\\nsomeint: {1}\\notherint: {2}\\nthirdint: {3}\",thirdint);
Console.ReadKey();
}
static void SetInts(bool cond0,bool cond1,bool cond2,bool cond3,bool cond4,bool cond5,ref int i,ref int someint,ref int otherint,ref int thirdint)
{
if (cond0) i = someint;
if (cond1) i = otherint;
if (cond2) i = thirdint;
if (cond3) i = someint;
if (cond4) i = otherint;
if (cond5) i = thirdint;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。