c#保存对象值

本文关键字:对象 保存 | 更新日期: 2023-09-27 18:14:56

希望有人能帮助我。我有一个方法(user_login),它提示用户登录,然后生成并返回发票和令牌。

问题是,如果用户已经登录(我将其保存在一个列表中),方法svr。不能调用Logonex。我应该从前一个实例中检索值。我想我必须保存svr变量,但我不知道怎么做。任何帮助都将不胜感激。由于

代码如下:

public EPS30Ora.LogonResult User_Login(input_params inputparams)
        {
          EPS30Ora.EPS30Svr svr = new EPS30Ora.EPS30Svr();
         if (Users.Exists(Username => Username.Username.Equals(inputparams.Username)))
            {
                List<input_params> selected = Users.Where(Username => Username.Username.Equals(inputparams.Username)).ToList();
                svr.PrepareByMoney(selected[0].ck, 1, inputparams.meter_number, 10, 0, ref cal);
            }
            else 
            {
                Log_Res = svr.LogOnEx("EDEESTE", inputparams.VSID, inputparams.Username, inputparams.Password, "EPS30Ora", ref inputparams.ck);
                if (Log_Res == EPS30Ora.LogonResult.psOK)
                {
                    try
                    {
                        Users.Add(inputparams);
                        object tr_bl = svr.GetInvoiceData(inputparams.ck, svr.Confirm(inputparams.ck));
                    }
                    catch (System.Runtime.InteropServices.COMException ex)
                    {
                        Trace.WriteLine("Se ha producido una excepción: " + ex);
                    }
              }

            }
            return Log_Res;
        }

c#保存对象值

听起来你需要拉这个:

EPS30Ora。EPS30Svr = new EPS30Ora.EPS30Svr();

移出Login方法,并将其移到调用该方法的任何对象中,以便使该对象在作用域内停留更长时间。否则,当您从该方法返回时,该对象将被销毁。

你可以把它作为参数传递给这个方法,例如:

// Start user process
EPS30Ora.EPS30Svr svr = new EPS30Ora.EPS30Svr();
if (Users.Exists(Username => Username.Username.Equals(inputparams.Username))) {
 // do something
}
else {
}

public LogOn(EPS30Ora.EPS30Svr svr, input_params inputparams)
{
Log_Res = svr.LogOnEx("EDEESTE", inputparams.VSID, inputparams.Username, inputparams.Password, "EPS30Ora", ref inputparams.ck);
}

namespace EPSInvoice_ServiceLibrary
{
    public class EPS_Service : IEPS_Service
    {
        List<input_params> Users = new List<input_params>();
        List<token_data> token_data = new List<token_data>();
        public decimal cal;

        public EPS30Ora.LogonResult Invoice(input_params inputparams)
        {
            EPS30Ora.EPS30Svr svr = new EPS30Ora.EPS30Svr();
            EPS30Ora.LogonResult Log_Res = new EPS30Ora.LogonResult();
            Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
            Trace.AutoFlush = true;
            Trace.Indent();
            if (Users.Exists(Username => Username.Username.Equals(inputparams.Username)))
            {
                List<input_params> selected = Users.Where(Username => Username.Username.Equals(inputparams.Username)).ToList();
                Trace.WriteLine("Username: " + inputparams.Username + " ya está logeado " + selected[0].ck);
                //    svr.PrepareByMoney(selected[0].ck, 1, inputparams.meter_number, 10, 0, ref cal);
            }
            else
            {
                try
                {
                    Log_Res = svr.LogOnEx("EDEESTE", inputparams.VSID, inputparams.Username, inputparams.Password, "EPS30Ora", ref inputparams.ck);
                    if (Log_Res == EPS30Ora.LogonResult.psOK)
                    {
                        Users.Add(inputparams);
                        Trace.WriteLine("Login OK. Username: " + inputparams.Username);
                        svr.PrepareByMoney(inputparams.ck, 1, inputparams.meter_number, 10, 0, ref cal);
                        object tr_bl = svr.GetInvoiceData(inputparams.ck, svr.Confirm(inputparams.ck));
                        token_data.Add(new token_data() { transfer_number = (string)((object[])(((object[])(((object[])(((object[])(tr_bl))[4]))[1]))[0]))[0] });
                        Trace.WriteLine("Transacción Finalizada. NTC obtenido: " + inputparams.ck);
                        Trace.Unindent();
                    }
                }
                catch (System.Runtime.InteropServices.COMException ex)
                {
                    Trace.WriteLine("Se ha producido una excepción: " + ex);
                }
            }
         return Log_Res;
        }


    }

}