有没有办法在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分散在程序中。
答案 0 :(得分:2)
确实如此,但您必须在unsafe block中包装任何代码。
或者,如果在方法中发生这种情况,那么您可以使用'ref' keyword通过引用传递参数。
这两个选项都限制了方法边界的解决方案。如果你正在处理比这更分散的事情,那么在C#中尝试找到重新组织代码以使用较少全局状态的方法可能会更好。
答案 1 :(得分:1)
是的,有一种名为IntPtr的类型,我用它来处理Windows句柄。
答案 2 :(得分:1)
Here's an example of C# pointers说明了他们的声明以及如何将它们包裹在unsafe block
中答案 3 :(得分:0)
我不确定您是否在问题中提供了足够的信息来给出正确答案,但一种可能的解决方案是使用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, false, false, false, false, ref i, ref someint, ref otherint, ref thirdint);
Console.WriteLine("i: {0}\nsomeint: {1}\notherint: {2}\nthirdint: {3}", i, someint, otherint, 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;
}
}