尝试内联调用操作重载方法时出现的问题

问题描述

我有一个奇怪的问题:

             /*listFiscalYear = new List<int> { 
                    currentFiscalYear.Value(),currentFiscalYear++.Value(),currentFiscalYear++.Value() };*/

                listFiscalYear = new List<int>();
                listFiscalYear.Add(currentFiscalYear.Value());
                for (int i = 0; i < 3; i++)
                {
                    currentFiscalYear++;
                    listFiscalYear.Add(currentFiscalYear.Value());
                }

上面的注释代码不起作用。我得到的结果是:

20202021
20202021
20212022
20222023

预期结果:

20202021
20212022
20222023
20232024

您可以看到第二个条目是错误的。未注释掉的代码可以正常工作。我尝试在第二个条目(currentFiscalYear++).Value()周围加上括号,但没有。在for循环中,如果我执行以下listFiscalYear.Add(currentFiscalYear++.Value());而不是将其单独声明,则会发生相同的错误。该FiscalYear类将是将要使用的非常注释类,我知道人们会像这样以内联方式使用它,这就是为什么我想知道为什么会发生这种情况以及是否有办法防止它发生。

如果需要,这里是FiscalYear类:

        public class FiscalYear
        {
            private int _fiscalYear;

            public int BeginYear()
            {

                if (_fiscalYear > 0)
                {
                    return int.Parse(_fiscalYear.ToString().Left(4));
                }
                else
                {
                    return default(int);
                }
            }

            public bool DateInFiscalYear(DateTime date)
            {
                return date >= BeginDate()
                    && date <= EndDate();
            }

            public DateTime BeginDate()
            {
                return new DateTime(BeginYear(),7,1);
            }

            public DateTime EndDate()
            {
                return new DateTime(EndYear(),6,30);
            }


            public int EndYear()
            {
                if (_fiscalYear > 0)
                {
                    return int.Parse(_fiscalYear.ToString().Right(4));
                }
                else
                {
                    return default(int);
                }
            }

            /*public static FiscalYear Create()
            {
                return new FiscalYear();
            }

            public static FiscalYear Create(string fiscalYear)
            {
                guard(fiscalYear);
                return new FiscalYear(fiscalYear);
            }

            public static FiscalYear Create(int fiscalYear)
            {
                guard(fiscalYear.ToString());
                return new FiscalYear(fiscalYear);
            }*/

            private static FiscalYear Subtract(FiscalYear fiscalYear,int yearsToSubtract)
            {
                return new FiscalYear((fiscalYear.BeginYear() - yearsToSubtract).ToString() + (fiscalYear.EndYear() - 1).ToString());
            }

            private static FiscalYear Add(FiscalYear fiscalYear,int yearsToAdd)
            {
                return new FiscalYear((fiscalYear.BeginYear() + yearsToAdd).ToString() + (fiscalYear.EndYear() + yearsToAdd).ToString());
            }

            public static FiscalYear operator --(FiscalYear fiscalYear)
            {
                return Subtract(fiscalYear,1);
            }

            public static FiscalYear operator -(FiscalYear fiscalYear,int yearsToSubtract)
            {
                return Subtract(fiscalYear,yearsToSubtract);
            }

            public static FiscalYear operator ++(FiscalYear fiscalYear)
            {
                return Add(fiscalYear,1);
            }

            public static FiscalYear operator +(FiscalYear fiscalYear,int yearsToAdd)
            {
                return Add(fiscalYear,yearsToAdd);
            }

            public FiscalYear()
            {
                var _currentDate = DateTime.Today;
                _fiscalYear = _currentDate > new DateTime(_currentDate.Year,30) ?
                    int.Parse(_currentDate.Year.ToString() + (_currentDate.Year + 1).ToString()) :
                    int.Parse((_currentDate.Year - 1).ToString() + _currentDate.Year.ToString());
            }

            private static void guard(string fiscalYear)
            {
                if (!fiscalYear.IsNumeric())
                {
                    throw new ArgumentException($"Fiscal Year must be numeric but was {fiscalYear}");
                }

                if (int.Parse(fiscalYear) <= 0)
                {
                    throw new ArgumentException($"Fiscal Year must be greater than 0 but was {fiscalYear}");
                }

                if (fiscalYear.ToString().Length != 8)
                {
                    throw new ArgumentException($"Fiscal Year must be 8 digits log but was {fiscalYear}");
                }
            }


            public FiscalYear(int fiscalYear)
            {
                guard(fiscalYear.ToString());
                _fiscalYear = fiscalYear;
            }

            public FiscalYear(string fiscalYear)
            {
                guard(fiscalYear);
                _fiscalYear = int.Parse(fiscalYear);
            }

            public int Value() {
                return _fiscalYear;
            }

            public override string ToString()
            {
                if (_fiscalYear > 0)
                {

                    return BeginYear().ToString() + "-" + EndYear().ToString();
                }
                else
                {
                    return null;
                }
            }

谢谢。...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)