C# 序列号跳2

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

我打印出序列号,它跳了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.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指出的;仅在调试器中查看该属性会导致值更改。