【问题标题】:Return Results To Calling Method将结果返回给调用方法
【发布时间】:2015-07-10 08:08:53
【问题描述】:

将参数传递给方法对我来说没有问题,但是将参数返回给调用者方法,我从来没有做过,也不知道该怎么做。例如,我想从我的 GetStartOfQuery 方法返回 soq。如何将这些数据恢复到我的 BuildAQuery 方法中?

public static string soq = string.Empty;

public static void BuildAQuery(string databaseName)
{
  dao.Database dd;
  dao.DBEngine db = new dao.DBEngine();
  var qd1 = new dao.QueryDef(); 
  GetStartOfQuery(databaseName);
  dd = db.OpenDatabase(SetPath(databaseName));
  qd1.Name = String.Format("qry_PersonalInformation");
  qd1.SQL = String.Format(startOfQuery + "location", "empID");
  dd.QueryDefs.Append(qd1);
}

public static void GetStartOfQuery(string databaseName)
{
  if (VBS.Left(databaseName, 2) == "AC")
  {
    soq = "Select hiredate, terminationdate, employeename, ";
  }
  else 
  {
    soq = "Select hiredate, employeename, timeoffaccrued, timeoffused, ";
  }
}   

【问题讨论】:

标签: c# variables methods parameters


【解决方案1】:

假设你只需要一个字符串:

public static string GetStartOfQuery(string databaseName)
{
  if (VBS.Left(databaseName, 2) == "AC")
  {
    return "Select hiredate, terminationdate, employeename, ";
  }
  else 
  {
    return "Select hiredate, employeename, timeoffaccrued, timeoffused, ";
  }
} 

public static void BuildAQuery(string databaseName)
{
    dao.Database dd;
    dao.DBEngine db = new dao.DBEngine();
    var qd1 = new dao.QueryDef(); 
    soq = GetStartOfQuery(databaseName);
    dd = db.OpenDatabase(SetPath(databaseName));
    qd1.Name = String.Format("qry_PersonalInformation");
    qd1.SQL = String.Format(startOfQuery + "location", "empID");
    dd.QueryDefs.Append(qd1);
}

会成功的

【讨论】:

  • 我的 BuildAQuery 函数(在您的示例中)如何知道将返回的值与 soq 关联?
  • @MasterOfStupidQuestions 与行soq = GetStartOfQuery(databaseName);
【解决方案2】:

你最好使用这样的函数:

public static void BuildAQuery(string databaseName)
{
    dao.Database dd;
    dao.DBEngine db = new dao.DBEngine();
    var qd1 = new dao.QueryDef(); 
    soq = GetStartOfQuery(databaseName);
    dd = db.OpenDatabase(SetPath(databaseName));
    qd1.Name = String.Format("qry_PersonalInformation");
    qd1.SQL = String.Format(startOfQuery + "location", "empID");
    dd.QueryDefs.Append(qd1);
}


public static string GetStartOfQuery(string databaseName)
{
  if (VBS.Left(databaseName, 2) == "AC")
  {
    soq = "Select hiredate, terminationdate, employeename, ";
  }
  else 
  {
    soq = "Select hiredate, employeename, timeoffaccrued, timeoffused, ";
  }
  return soq;   
}  

因为 void 不返回任何内容,而您希望返回一个值。如果您不想在 string 函数中返回它,您可以根据需要将 var 传递为 outref。喜欢:

public static void BuildAQuery(string databaseName)
{
    dao.Database dd;
    dao.DBEngine db = new dao.DBEngine();
    var qd1 = new dao.QueryDef(); 
    string soq = string.Empty.
    GetStartOfQuery(databaseName, soq);
    dd = db.OpenDatabase(SetPath(databaseName));
    qd1.Name = String.Format("qry_PersonalInformation");
    qd1.SQL = String.Format(startOfQuery + "location", "empID");
    dd.QueryDefs.Append(qd1);
}


public static void GetStartOfQuery(string databaseName, out string soq)
{
  if (VBS.Left(databaseName, 2) == "AC")
  {
    soq = "Select hiredate, terminationdate, employeename, ";
  }
  else 
  {
    soq = "Select hiredate, employeename, timeoffaccrued, timeoffused, ";
  }  
}  

【讨论】:

  • should better use 为什么更好;)
  • @PeterSchneider 好吧,我不认为但是我认为我总能学到一些东西,所以我更愿意问,以防万一:)
  • 第二个函数中的 out 参数是可以的,但对于简单类型和只有一个返回值的情况来说就过分了。在函数中分配给“全局”soq 并返回该soq 有时很方便(想想C 的`strcat()'),但似乎不是好的设计。如果函数看起来不像,最好不要产生副作用。
  • 我只是提供选项,他/她必须决定,但您的评论被接受。
猜你喜欢
  • 2016-03-23
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2019-03-18
  • 2019-09-07
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多