更改方法后如何解决int值重置

时间:2018-07-24 11:06:36

标签: c#

我在方法GetDays中设置了一个int值,然后我想在GetRiskAssement()中使用此值,但是一旦我返回此方法,它将立即更改为默认值0。

我想设置intDays并使其保持不变,直到再次运行GetDays方法。

public class RiskA
{
    int accountId;
    static int intDays;
    bool stop;
    List<int> DateVehicleList = new List<int>();

    public List<DisplayableRiskAssement> DisplayableRiskAssement { get; private set; }

    public RiskAssement()
    {
        accountId = 461;
        DisplayableRiskAssement = GetRiskAssement();
    }

    List<DisplayableRiskAssement> GetRiskAssement()
    {
       //Additional code here than runs through a load of records
        if(riskAssement.InUK == false)
        {
            GetVehiclesNotInUK(riskAssement.VehicleID);
            riskAssement.IntDaysSinceUK = intDays;
        }
        return riskAssesments;
    }

    protected void GetVehiclesNotInUK(int VehicleID) 
    {
        //Code here that creates DateVehicleList
        GetDays(DateVehicleList, intDays);
    }

    private static int GetDays(List<int> DateVehicleList, int intDays) 
    {
        using (aEntities db = new aEntities())
        {
            foreach (var item in DateVehicleList)
            {
                var qryDate = (from a in db.ev
                               where a.evID == item
                               select a.sysdatetime).Single();

                string strDate = qryDate.ToString();
                DateTime oldDate = DateTime.Parse(strDate);

                TimeSpan t = DateTime.Now - oldDate;
                double doubleDays = t.TotalDays;
                intDays = Convert.ToInt32(doubleDays);
            }
        }
        DateVehicleList.Clear();
        return intDays;
    }
}

3 个答案:

答案 0 :(得分:0)

您的方法GetDays应该作用于类变量,而不是要传递的参数。

如果您希望该方法使用类变量,只需从该方法中删除参数即可:

private static int GetDays(){...}

答案 1 :(得分:0)

在C#中,可以通过值或引用将参数传递给参数。对于您的 GetDays 方法,您已通过引用传递了 DateVehicleList ,并通过值传递了 intDays 。除非您在其中分配了返回的值,否则之前来自类对象的 intDays 值将不会更新。

protected void GetVehiclesNotInUK(int VehicleID) 
{
    //Code here that creates DateVehicleList
    intDays = GetDays(DateVehicleList, intDays);
} 

不是,它会按您的预期工作,干杯!

答案 2 :(得分:0)

int是Primitive类型的,因此默认情况下为0。因此,在初始化对象时,构造函数将调用GetRiskAssement()方法,并且该方法使用的intDay仍未在GetDays()方法中设置,因此它返回0到您。 您可以将intDay用作类属性,并对其进行getter和setter,而getDays()方法将对您的类属性而不是参数起作用。

private static int intDay;
public static int getIntDay()
{
    return intDay;
}
public static void setIntDay(int intDay)
{
    this.intDay = intDay;
}

您的函数应该看起来像

private static int GetDays()
{
    //your code goes here
}

希望这对您有所帮助。