2012-04-03 6 views
2

저는 C#에서 약간 새로운 것이므로이 코드를 최소화 할 수 있는지 궁금합니다. C# 문을 최소화하십시오.

private void CheckFiles() 
{ 
    if (!File.Exists(ProgramLocation + "\\Server Files\\" + "Bukkit.jar")) 
    { 
     DownloadBukkitJar(); 
    } 
    else 
    { 
     Close(); 
    } 
    if (!File.Exists(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll")) 
    { 
     DownloadHtmlAgilityPackDll(); 
    } 
    else 
    { 
     Close(); 
    } 
} 

그래서 어떻게 적은 코드이 만들 수 :

이것은 내가 지금까지 가지고 무엇인가?

+4

내가 궁금해서 이유를 일부 코드의 '_ 길이 _'와 관련이 있습니다.코드를 관찰하면 _improve_하는 방법을 찾아서 '줄이는'방법을 찾아야하지만 ... 목적을 위해. –

+0

@ Mr. 실망 나는 약간의 코드가 있다면 프로그램이 더 잘 수행된다고 생각했다. 그것은 아마 생각하지 않습니다. –

+0

보다 간결한 코드는 더 읽기 쉬운 코드입니다. 그러나 * 간결 *와 * 작은 * 사이에는 미묘한 차이가 있습니다. –

답변

3
private void CheckFile(string path, Action actionIfMissing) 
{ 
    if (!File.Exists(path)) 
    { 
     actionIfMissing(); 
    } 
    else 
    { 
     Close(); 
    } 
} 

public void CheckFiles() 
{ 
    var bukkitPath = Path.Combine(ProgramLocation, String.Format("{0}{1}{2}", "Server Files", Path.DirectorySeparatorChar, "Bukkit.jar"); 
    CheckFile(bukkitPath, DownloadBukkitJar); 
    var htmlAgilityPackPath = Path.Combine(ProgramLocation, String.Format("{0}{1}{2}", "dlls", Path.DirectorySeparatorChar, "HtmlAgilityPack.dll"); 
    CheckFile(htmlAgilityPackPath, DownloadHtmlAgilityPackDLL); 
} 

주 - 하드 코딩 할 때주의해야 경로를 구성하는 경우 또는 경로 결합시 Path.Combine을 사용하는 경우 Path.DirectorySeparatorChar을 사용해야합니다. 이렇게하면 코드가 더 이식성있게 만드는 플랫폼 특정 경로가 보장됩니다. 이 작업을 수행하는 방법을 보여주기 위해 예제를 업데이트했습니다.

난 당신이 하나의 블록에()에 가까운 두 통화를 통합하려는 이해하는 것과
+0

+1. 썽크 제작이 필요한가요? –

+0

@StefanHanke - 아니, 너의 좋은 장소 야. – James

+0

와우, 감사합니다 = O 이것은 지금 읽기가 훨씬 쉽습니다 :)! +1! –

1

내가 가까이() 또는 downloadfunctions이 무엇 모르겠지만 개인적으로 나는 이런 식으로 뭔가를 목표로합니다 : 스타일 가이드 라인을 취향에 따라 코딩

private void CheckFiles() 
{ 
    DownloadIfNeeded(ProgramLocation + "\\Server Files\\" + "Bukkit.jar"); 
    DownloadIfNeeded(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll"); 
} 

private void DownloadIfNeeded(string s) 
{ 
    if (!File.Exists(s)) 
    { 
     DownloadFile(s); 
    } 
    else 
    { 
     Close(); 
    } 
} 
1

을 다음과 합리적인 수 있습니다 시도 :

private void CheckFiles() 
{ 
    bool bukkit = File.Exists(string.Format("{0}\\Server Files\\Bukkit.jar", ProgramLocation)); 
    bool htmlap = File.Exists(string.Format("{0}\\dlls\\HtmlAgilityPack.dll", ProgramLocation)); 

    if (!bukkit)   DownloadBukkitJar(); 
    if (!htmlap)   DownloadHtmlAgilityPackDll(); 
    if (bukkit || htmlap) Close(); 
} 

노트

  • 나는 두 번 Close를 호출하는 것은 정말 의미가없는 것을 가정
  • ( 성능 전에 코드 선명도 의 예) 및 String.format의 사용에
+1

Close()는 부작용이 있는지 모르기 때문에 다운로드 한 후에 호출해야합니다. – Slugart

+1

@Slugart Duh ... 아마도 그렇지 않습니다. OP의 코드를 참조하십시오. – sehe

0

는 여기 호출 횟수 닫기() 문제가되지 않는다는 것을 가정 , 그렇게 할 수있는 방법

bool bukkitExists=File.Exists(ProgramLocation + "\\Server Files\\" + "Bukkit.jar"); 
bool htmlAgilitPackExists=File.Exists(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll"); 
if(bukkitExists||htmlAgilitPackExists){Close();} 
else{ 
if (!htmlAgilitPackExists){DownloadHtmlAgilityPackDll();} 
if(!bukkitExists){DownloadBukkitJar();} 
} 
0
private void CheckFiles() 
{ 
    bool bukkitExists = File.Exists(ProgramLocation + "\\Server Files\\" + "Bukkit.jar"); 
    if (!bukkitExists) 
    { 
     DownloadBukkitJar(); 
    } 
    bool agilityExists = File.Exists(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll"); 
    if (!agilityExists) 
    { 
     DownloadHtmlAgilityPackDll(); 
    } 

    if (bukkitExists || agilityExists) 
    { 
     Close(); 
    } 
} 

당신은 양식을 폐쇄하고 있습니까? 정말로 두 번 닫으시겠습니까?

0

어떤 것들은 :
- Path.Combine를 사용하여 경로를 연결하여 (http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx)
- ... 경로, 정규식 패턴 앞에 @ 기호를 사용 그래서 당신은 '특수 문자'를 탈출 할 필요가 없습니다 (
-에 따라 :! - http://en.csharp-online.net/CSharp_FAQ%3A_What_does_at_sign_identifier_mean)
중괄호 {및} 어떤 사람이 나쁜 코드를 볼 수 있지만 한 줄 (앞의 문을 다음과 경우) 상황에 따라

더 많은 정보를 필요하지 않습니다 함수를 호출하면 항상 호출 할 수 있습니다. else 문이없는 if 문은 두 개 뿐이며 CheckFiles() 메서드의 끝에서 Close()를 호출하면됩니다.
- (그렇지 않으면 경로) 문자열을 연결하면, 항상 대신 '+'기호 당신의 예에서 (http://msdn.microsoft.com/en-us/library/system.string.format.aspx)

의 및 String.format 방법을 사용

private void CheckFiles() 
{ 
    if (!File.Exists(Path.Combine(ProgramLocation, @"Server Files\Bukkit.jar"))) 
     DownloadBukkitJar(); 
    else 
     Close(); 

    if (!File.Exists(Path.Combine(ProgramLocation, @"dlls\HtmlAgilityPack.dll"))) 
     DownloadHtmlAgilityPackDll(); 
    else 
     Close(); 
} 
관련 문제