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의 답변 외에도'Get'tTargets()이 반환하는 타입을 독자에게 알려주지 않기 때문에'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에 대한 귀하의 설명과 예제 소스를 제공해 주셔서 감사합니다! –