如何将 var 作为另一个方法的参数传递?
How to pass var as another method`s parameter?
我正在申请 windows。
起初我声明了 var,它包含另一个 class 方法。
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;
}
}
如何修改该代码?请帮助我。
var
只是隐式键入变量的一种快捷方式。它节省了一些输入,但有时当 reader 无法确定类型时会使代码更难阅读。不过,编译器可以找出强类型(否则你会得到一个编译器错误),如果你在 Visual Studio 中将鼠标悬停在它上面,编译器会告诉你实际类型。
除此之外,您需要做的就是确保要将变量传递给的方法采用您要传递的类型(记住类型不是 var
,但在你的情况下它是 ExtTarget
).
您调用的方法应具有类似于此的签名(尽管它可能 return 任何类型):
public void SyncExt(ExtTarget extTarget)
{
// Implementation code here
}
然后在上面的代码中你可以调用:
ServiceProcess.Instance.SyncExt(Ext);
我正在申请 windows。
起初我声明了 var,它包含另一个 class 方法。
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;
}
}
如何修改该代码?请帮助我。
var
只是隐式键入变量的一种快捷方式。它节省了一些输入,但有时当 reader 无法确定类型时会使代码更难阅读。不过,编译器可以找出强类型(否则你会得到一个编译器错误),如果你在 Visual Studio 中将鼠标悬停在它上面,编译器会告诉你实际类型。
除此之外,您需要做的就是确保要将变量传递给的方法采用您要传递的类型(记住类型不是 var
,但在你的情况下它是 ExtTarget
).
您调用的方法应具有类似于此的签名(尽管它可能 return 任何类型):
public void SyncExt(ExtTarget extTarget)
{
// Implementation code here
}
然后在上面的代码中你可以调用:
ServiceProcess.Instance.SyncExt(Ext);