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分散在程序中。
确实如此,但您必须将任何执行此操作的代码包装在不安全的块中。
或者,如果这种情况发生在方法中,则可以使用"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;
}
}