2013-08-31 29 views
-5

我的代碼如下:如何解決C#中不安全指針的錯誤?

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' 
    } 

的問題是,當我試圖建立或運行項目我得到了很多的錯誤。 任何人有任何想法?

+3

這是一個質量很差的問題。如果你不知道它們是如何工作的,你爲什麼要搞亂不安全的指針? –

+2

你想幹什麼,除了弄亂指針? – xanatos

+0

我從彙編反射器恢復此代碼 –

回答

1

你的代碼(修正):

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; 
} 
+0

這就是我需要的。您使用哪種軟件? –

+0

@MeysamSavameri我不知道。通常我使用ILSpy,但每個反編譯器都有一些問題。 – xanatos

+0

親愛的@xanatos謝謝。 –

相關問題