我的代码如下:
public static unsafe bool ExistInURL(params object[] ob)
{
void* voidPtr = (void*) stackalloc byte[5];//Invalid expression term
*((int*) voidPtr) = 0;
while (*(((int*) voidPtr)) < ob.Length)
{
if ((ob[*((int*) voidPtr)] == null) || (ob[*((int*) voidPtr)].ToString().Trim() == ""))
{
*((sbyte*) (voidPtr + 4)) = 0;//Cannot apply operator '+' to operand of type 'void*' and 'int'
goto Label_004B;
}
*(((int*) voidPtr))++;//The left-hand side of an assignment must be a varibale,property or indexer
}
*((sbyte*) (voidPtr + 4)) = 1;
Label_004B:
return *(((bool*) (voidPtr + 4)));//Cannot apply operator '+' to operand of type 'void*' and 'int'
}
问题是当我尝试构建或运行项目时,我遇到了很多错误。 有人有什么想法吗?
答案 0 :(得分:2)
您的代码(已更正):
public static unsafe bool ExistInURL(params object[] ob)
{
byte* voidPtr = stackalloc byte[5];
*((int*)voidPtr) = 0;
while (*(((int*)voidPtr)) < ob.Length)
{
if ((ob[*((int*)voidPtr)] == null) || (ob[*((int*)voidPtr)].ToString().Trim() == ""))
{
*((sbyte*)(voidPtr + 4)) = 0;
goto Label_004B;
}
(*(((int*)voidPtr)))++;
}
*((sbyte*)(voidPtr + 4)) = 1;
Label_004B:
return *(((bool*)(voidPtr + 4)));
}
而不是void*
使用byte*
,stackalloc
返回不得转换,++
运算符需要另一组()
...您的反编译器有一些错误:-)你应该告诉作者。
以及代码的未经模糊处理的版本:
public static bool ExistInURL2(params object[] ob)
{
int ix = 0;
bool ret;
while (ix < ob.Length)
{
if (ob[ix] == null || ob[ix].ToString().Trim() == string.Empty)
{
ret = false;
goto Label_004B;
}
ix++;
}
ret = true;
Label_004B:
return ret;
}
(我离开了goto
......但这不是必要的)
没有goto
:
public static bool ExistInURL3(params object[] ob)
{
int ix = 0;
while (ix < ob.Length)
{
if (ob[ix] == null || ob[ix].ToString().Trim() == string.Empty)
{
return false;
}
ix++;
}
return true;
}