【问题标题】:(object) is a Field but is used like a 'method'(object) 是一个字段,但用作“方法”
【发布时间】:2013-05-15 15:37:13
【问题描述】:

运行此代码时出现错误:

错误 1 ​​'EPSInvoice_ServiceLibrary.EPS_Service.tr_bl' 是一个“字段”,但用作“方法”

它在 VS.net 中运行良好,但我正在转换为 C#。 任何帮助,将不胜感激。 谢谢

代码如下:

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;
        object tr_bl;
        string branch;


        public void User_Login(input_params inputparams)
        { 
            EPS30Ora.EPS30Svr svr = new EPS30Ora.EPS30Svr();

              if (svr.LogOnEx("EDEESTE", inputparams.VSID, inputparams.Username, inputparams.Password, "EPS30Ora", ref inputparams.ck) == 0)
              {
                  try
                  {
                      Users.Add(inputparams);
                      svr.PrepareByMoney(inputparams.ck, 1, inputparams.meter_number, 10, 0, ref cal);
                      tr_bl = svr.GetInvoiceData(inputparams.ck, svr.Confirm(inputparams.ck));
                      branch = tr_bl(0)(1); 
                      token_data.Add(new token_data() { transfer_number = "0000000" });
                  }
                  catch (System.Runtime.InteropServices.COMException ex)
                  {

                  }
              }
        }

【问题讨论】:

  • branch = tr_bl(0)(1); 应该做什么?
  • 感谢您的回复。这里是GetInvoiceData()的定义: public virtual dynamic GetInvoiceData(string ClientKey, string TrnId) EPS30Ora.EPS30SvrClass的成员。我是 C# 新手,在 vb.net 上,它可以很好地声明一个名为 tr_bl 的对象,然后使用 tr_bl(0)(1) 检索其值。 GetInvoiceData 返回发票结构。感谢您的帮助。

标签: c# object methods get field


【解决方案1】:

您的数组索引器需要是方括号:

branch = tr_bl[0][1]; 

【讨论】:

  • 你好。谢谢你的回复。更改为方括号时出现错误:“无法使用 [] 将索引应用于 'object' 类型的表达式。我需要投射一些东西吗???我被卡住了。谢谢
  • 是的,您需要将其转换为 GetInvoiceData() 具有的任何返回类型。例如,如果它是int 类型的二维数组,则需要使用branch = (int[][])tr_bl[0][1];
  • 感谢您的回复。这里是GetInvoiceData()的定义: public virtual dynamic GetInvoiceData(string ClientKey, string TrnId) EPS30Ora.EPS30SvrClass的成员。我是 C# 新手,在 vb.net 上,它可以很好地声明一个名为 tr_bl 的对象,然后使用 tr_bl(0)(1) 检索其值。 GetInvoiceData 返回发票结构。感谢您的帮助。
  • 你不应该将该方法定义为返回dynamic,除非你真的打算返回一个动态类型(即使那样,最好只使用object)。 C# 与 VB 不同,在运行时不使用动态类型(少数情况除外),因此您始终需要定义某事物的类型,否则编译器会报错(就像这里的情况一样)。您需要弄清楚 GetInvoiceData() 方法实际在做什么,以及它实际返回的内容,然后转换为该方法。 dynamic 不是可以被索引的东西,你需要一个带索引器的类型,比如数组。
  • 最后,我得到了铸造对象的结构的值。断点很有帮助。 SpikeX 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2020-11-28
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多