2017-06-29 34 views
-1

我正在打印序列號,它跳過2,儘管我僅增加了1個。 我有一個帶有靜態變量的TradeSequenceNo對象。 我假設a1和b2將有值1,2,但我看到它的值爲2,4。我怎樣才能確保我可以通過1每次只能得到增量我打電話TradeSequenceNo.NextSequanceNo序列號跳過2

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    public class TradeSequenceNo 
    { 
     private static int sequenceno; 
     public string id 
     { 
      get 
      { 
       return "NextTradeID"; 
      } 
     } 
     public static int NextSequanceNo 
     { 
      get 
      { 
       sequenceno++; 
       return sequenceno; 
      } 
     } 
    } 

    public class Program 
    { 
     static void Main(string[] args) 
     { 
      int a1 = TradeSequenceNo.NextSequanceNo; 
      int b2 = TradeSequenceNo.NextSequanceNo; 
     } 
    } 
} 
+1

您發佈的代碼的行爲與您的預期相同(a1 = 1和b2 = 2)。你必須有一些你沒有顯示的代碼會導致問題。 –

+2

你不會碰巧在調試器中查看這些值,對嗎? –

+2

如上所述,你的代碼工作正常。請發佈一個演示您所看到的行爲的示例。作爲旁白;吸氣劑屬性的副作用*是一個壞主意*。它應該是一種方法,而不是吸氣劑。一個主要的問題是@Dour指出的;只是在調試器中觀察該屬性會導致值發生變化。 – Rob

回答

0

您發佈的行爲是因爲在調試器。每次在調試器中檢查屬性值時,都會調用它,結果會增加值。因此,如果您在調試器中多次訪問相同的值,您將獲得更高的數字,具體取決於您檢查變量值的次數。只需執行以下代碼(無需調試),您將意識到該代碼是正確的並且表現正確:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    public class TradeSequenceNo 
    { 
     private static int sequenceno; 
     public string id 
     { 
      get 
      { 
       return "NextTradeID"; 
      } 
     } 
     public static int NextSequanceNo 
     { 
      get 
      { 
       sequenceno++; 
       return sequenceno; 
      } 
     } 
    } 

    public class Program 
    { 
     static void Main(string[] args) 
     { 
      int a1 = TradeSequenceNo.NextSequanceNo; 
      int b2 = TradeSequenceNo.NextSequanceNo; 
      System.Console.WriteLine(a1); 
      System.Console.WriteLine(b2); 
      System.Console.ReadKey(); 
     } 
    } 
}