【问题标题】:How to pass var as another method`s parameter?如何将 var 作为另一个方法的参数传递?
【发布时间】:2017-03-24 02:28:38
【问题描述】:

我正在制作一个 Windows 应用程序。

一开始我声明了 var,它包含了另一个类方法。

var ExtList = ExtTarget.GetExtTargets();

而GetExtTargets()是这样的

public static List<ExtTarget> GetExtTargets()
{
    var dt = SqlHelper.ExecuteDataTable(QueryHelper.ConnectionString,
        @"
        SELECT [seq],[SourceKind],[ExtKind],[DBKind],[ConnectionString]
              ,[FilePath],[TableName],[FileKind],[RowSplitter],[ColumnSplitter]
              ,[Title],[GroupName],[SyncOrder],[RepeatKind],[RepeatMonth]
              ,[RepeatDay],[RepeatHour],[RepeatMin],[RepeatWeek],[RepeatWeekNum]
              ,[LastSyncExecDate]
        FROM [ExtTarget]
        order by GroupName,SyncOrder");
   return dt.Rows.Cast<DataRow>().Select<DataRow, ExtTarget>(a => ExtTarget.RowToModel(a)).ToList();
} 

然后,我用它来foreach,然后我想将Ext传递给另一个方法的参数。

代码是这样的。

public void ProcessExtSync(object obj)
{
    while (IsProcessGoing)
    {
        Thread.Sleep(ThreadDelay);
        if (!IsProcessGoing) return;

        var ExtList = ExtTarget.GetExtTargets();
        foreach (var Ext in ExtList) // I want to use this Ext as parameter
        {
            while (IsSourceSyncGoing)
            {
                Thread.Sleep(ThreadDelay);
            }
            IsExtSyncGoing = true;
            bool ExtSyncForceToRun = ConfigSettingHelper.Instance.IsServiceConfig(Words.ExtSyncForceToRun);
            bool ExtSyncForceToRunOnlyError = ConfigSettingHelper.Instance.IsServiceConfig(Words.ExtSyncForceToRunOnlyError);
            bool ExtSyncNeedToRun = ConfigSettingHelper.Instance.GetNextExecutingTime(Ext) < DateTime.Now;
            if (ExtSyncForceToRun || ExtSyncNeedToRun)
            {

                //I want to pass Ext as parameter to this method
                ServiceProcess.Instance.SyncExt();

                if (ExtSyncForceToRun)
                {
                    ConfigSettingHelper.Instance.SetServiceConfig(Words.ExtSyncForceToRun, false);
                }
                if (ExtSyncForceToRunOnlyError)
                {
                   ConfigSettingHelper.Instance.SetServiceConfig(Words.ExtSyncForceToRunOnlyError, false);
                }
            }
            if (!IsProcessGoing) return;
        }

        IsExtSyncGoing = false;
    }
}

如何修改该代码?请帮帮我。

【问题讨论】:

  • 通过它。它和其他任何变量一样是一个变量。我不明白问题是什么。你有错误吗?
  • 这与您为ProcessExtSync 定义的参数相同。如果您不知道如何将参数传递给方法,您可能应该先阅读教程或拿起 C# 书籍。
  • 除了@Rufus 的回答,我想说不要在你的情况下使用var,因为这根本不会告诉读者GetExtTargets() 正在返回什么类型。如果很明显,您可以使用var,例如var op = "ryden".
  • 感谢您回复本帖。我根据所有这些建议修改了我的代码,现在它运行良好。

标签: c# parameters parameter-passing var


【解决方案1】:

var 只是隐式键入变量的快捷方式。它节省了一些输入,但有时在读者无法确定类型时使代码更难阅读。不过,编译器可以计算出强类型(否则你会得到一个编译器错误),如果你在 Visual Studio 中将鼠标悬停在它上面,编译器会告诉你实际的类型。

除此之外,您需要做的就是确保您想要传递变量的方法采用您想要传递它的类型(记住类型不是var,而是你的情况是ExtTarget)。

你调用的方法应该有一个类似的签名(尽管它可能返回任何类型):

public void SyncExt(ExtTarget extTarget)
{ 
    // Implementation code here
}

然后在你上面的代码中你可以调用:

ServiceProcess.Instance.SyncExt(Ext);

【讨论】:

  • 是的,你说得对。我意识到我需要更多的学习。感谢 Rufus L 的解释和示例来源!
猜你喜欢
  • 2018-08-08
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多