C#指针引用

本文关键字:引用 指针 | 更新日期: 2023-09-27 17:57:45

有办法在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个If,而我的程序有更多的条件,所以这是不可行的
我想创造一些价值,比如:

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分散在程序中。

C#指针引用

确实如此,但您必须将任何执行此操作的代码包装在不安全的块中。

或者,如果这种情况发生在方法中,则可以使用"ref"关键字通过引用传入参数。

这两个选项都将解决方案约束到方法边界。如果你要处理的是比这更分散的东西,那么在C#中,最好尝试并找到重新组织代码的方法,以使用更少的全局状态。

是的,有一个名为IntPtr的类型我用于Windows句柄。

这里有一个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, 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;
    }
}