2017-03-24 5 views
0

私はWindowsアプリケーションを作っています。別のメソッドの `パラメータとしてvarを渡すには?

最初に私は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のためにそれを使用して、私は別のメソッドのパラメータに内線を渡したいです。

コードは次のとおりです。

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; 
    } 
} 

このコードはどのように変更できますか?私を助けてください。

+2

だけでパスを

あなたが呼び出しているメソッドは、これと同様の署名を(それは任意の型を返すかもしれないが)持っている必要がありますそれ。他のどのような変数でもあります。私は問題が何であるか理解していない。エラーが発生していますか? – dman2306

+0

「ProcessExtSync」の引数を定義したのと同じです。メソッドに引数を渡す方法がわからない場合は、まずチュートリアルを実行するか、C#のブックを最初に取得する必要があります。 – Rob

+0

@ Rufusの答えに加えて、あなたが 'GetExtTargets()'がどんな型を返すのかを読者に伝えていないので、 'var'を使わないと言うでしょう。明らかな場合は、 'var'を使うことができます。 'var op =" ryden "'です。 – niksofteng

答えて

3

varは、変数を暗黙的に入力する簡単な方法です。いくつかのタイプを保存しますが、タイプを判別できないときにコードを読みにくくすることがあります。コンパイラは強い型を見つけることができます(またはコンパイラエラーが発生します)。そして、Visual Studioでその型の上にカーソルを置くと、実際の型がコンパイラによって指示されます。

あなたがする必要があるのは、変数を渡すメソッドが、渡すタイプのものであることを確認することです(タイプはvarではなく、ケースはExtTargetです)。あなたが呼び出すことができる上に、あなたのコードに続いて

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

ServiceProcess.Instance.SyncExt(Ext); 
+0

ええ、あなたは正しいです。私はもっ​​と勉強が必要だと気付きました。あなたの説明とサンプルソースのためのRufus Lありがとう! –

関連する問題