C# 序列号跳2
我打印出序列号,它跳了2,尽管我只增加了1。 我有一个带有静态变量的对象TradeSequenceNo。 我假设a1和b2的值为1,2,但我看到它的值为2,4。如何确保每次调用TradeSequenceNo.NextSequenceNo.NextSquanceno时只能获得1的增量C# 序列号跳2,c#,C#,我打印出序列号,它跳了2,尽管我只增加了1。 我有一个带有静态变量的对象TradeSequenceNo。 我假设a1和b2的值为1,2,但我看到它的值为2,4。如何确保每次调用TradeSequenceNo.NextSequenceNo.NextSquanceno时只能获得1的增量 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading
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;
}
}
}
您发布的行为是由于调试器造成的。每次在调试器中检查属性值时,都会调用它,从而导致值的增量。因此,如果您在调试器中多次访问同一个值,您将获得更高的数字,具体取决于您检查变量值的次数。只需执行以下代码(无需调试),您就会意识到代码是正确的,并且行为正常:
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();
}
}
}
您发布的代码的行为与您预期的一样(a1=1和b2=2)。您必须有一些未显示的导致问题的其他代码。您不会碰巧看到调试器中的值,对吗?如上所述,您的代码工作正常。请张贴一个例子,展示你所看到的行为。作为旁白;getter属性中的副作用是个坏主意。它应该是一个方法,而不是一个getter。一个主要问题是@Dour指出的;仅在调试器中查看该属性会导致值更改。