2010-08-17 6 views
0

내가 원하는 것은 한 공백에서 다른 공백으로 문자열을 전달하는 것입니다.C# 공백 사이에 문자열 전달

private void getFilename2() 
    { 
     if (textBox2.TextLength.Equals("0")) 
     { 

     } 
     else 
     { 
      string inputString = textBox2.Text.ToString(); 
      string last = inputString.Substring(inputString.LastIndexOf('\\') + 1); 
      string[] filename2 = last.Split('.'); 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     getFilename1(); 
     getFilename2(); 
string filez = filename2; 
} 

나는 이것이 작동하지 않는다는 것을 알고 있지만, 빈 공간에서 문자열을 움직이는 방법에 대해서는 거의 익숙하지 않습니다.

+5

getFilename2 메서드가 문자열을 반환 할 수없는 이유가 있습니까? – fletcher

+2

이것이 내가 좋아하는 질문이라고 생각합니다! – David

+0

텍스트 상자의 이름을 지정해야합니다. – SLaks

답변

0

클래스 수준 변수에 저장할 수 있습니다. 그런 식으로 모든 기능을 통해 액세스 할 수 있습니다.

1

문자열을 전달하는 경우 이 (가)으로 전달되어야합니다. IE : 당신의 함수가 받아 들일 수 있도록 그리고/또는 리턴 값이 getFilename2을 호출하는 코드 이외의 것에 의해 사용되지 않는 경우에, 특히 그들이 처리 할 값을 반환하십시오. 그러나 그렇게 할 수 없다면 클래스 내부에 private string filename1 = null; public string[] filename2 = null을 선언 할 수 있습니다. 그러나 메소드 외부에 선언 할 수 있습니다.

길을가는 경우 메서드에서 string filename1 또는 string[] filename2을 제거해야합니다. 그렇지 않으면 인스턴스 변수를 설정하지 않고 동일한 이름의 로컬 변수를 선언하게됩니다.

5

가장 좋은 방법은 클래스 필드/속성 또는 값을 반환하는 함수를 사용하는 것입니다.

string filez = GetFilename2(); 

private string GetFilename2() { 
{  
    if (textBox2.TextLength.Equals("0")) return ""; 

    string inputString = textBox2.Text.ToString();  
    string last = inputString.Substring(inputString.LastIndexOf('\\') + 1);  
    return last.Split('.');  
} 
8

당신은 당신은 당신의 기능에 매개 변수로 참조로 문자열을 전달할 수

Path.GetFileNameWithoutExtension(textBox2.Text) 
+0

문자열'filez = Path.GetFileNameWithoutExtension (textBox2.Text);에 직접 사용할 수있는 문자열을 반환한다. – ChrisF

+2

이것은 좋을 수도있다. 코드를 정리하지만 OP의 근본적인 질문에는 답하지 않습니다. 투표를하지 않겠지 만 왜 이것이 투표에 올랐는지 확신 할 수 없습니다. –

3

getFilename2 기능을 교체해야

private void button1_Click(object sender, EventArgs e) 
{ 
    string fileName; 
    getFilename1(ref string fileName); 
} 

private void getFilename1(ref string fileName) 
{ 
    // Whatever you do with fileName here will be reflected in the other function 
} 
+0

사실 요청 된대로 공백을 유지하기 위해 +1. 그가 동의하지만 그는 단지 문자열을 반환해야합니다. – Jack

+0

나는이 시나리오에 대한 문자열을 반환해야한다는 것에 동의한다. 비록 우리가 대안으로이 솔루션을 게시하겠다는 생각으로 창조적으로해야하는 이상한 코딩 문제가 발생했습니다. – Rachel

3

이의이 방법의 이름으로 시작하자 : getFilename2.

  • "수"의 접두사는 방법이 더 적절한 이름이 파일을 검색하는 getFileName1 방법이 내가 믿고있어 SetFileName

을 할 수있다

  • 반환 유형을해야 의미 이름은 textBox1이며 getFileName2과 완전히 동일한 코드를 사용하지만 textBox2 대신 textBox1을 사용합니다. 이 코드를 리팩토링 및 재사용 할 수있는 일반적인 방법 만들 수있는 좋은 장소가 될 것입니다 :

    private string GetFileName(string str) 
    { 
        if (string.IsNullOrEmpty(str)) return string.Empty; 
    
        string last = str.Substring(str.LastIndexOf('\\') + 1);  
        return last.Split('.');  
    } 
    

    을하지만, 우리는 다시 리팩토링 바로 사용할 수있는 내장 .NET 방법 :

    private string GetFileName(string str) 
    { 
        return Path.GetFileNameWithoutExtension(str); 
    } 
    
    ;

    private void button1_Click(object sender, EventArgs e) 
    { 
        string filez = GetFileName(textBox2.Text); 
    } 
    

    이제 우리는 (려면 getFilename하는 방법이) :

    그리고 지금은 일반적인 방법이 있다는 것을, 우리는 같은 필요를 다시 사용할 수 있습니다 모든 일은 GetFileNameWithoutExtension()의 기본 제공 .NET 메서드를 호출하는 것입니다.

    이제
    private void button1_Click(object sender, EventArgs e) 
    { 
        string filez = Path.GetFileNameWithoutExtension(textBox2.Text); 
    } 
    

    ,의 또 다른 하나 개의 공간에서 문자열을 전달 살펴 보자 : 그래서, 심지어 방법을 가지는 대신에, 우리는 단지 내장 .NET 방법 파일 이름을 반환에 사용한다. 일반적으로 내부 필드 또는 속성을 사용하여이 작업을 수행하려고합니다.당신이 내부 필드 또는 속성을 사용하지 않은 경우 Rachel

    응답으로

    private string FileName1 {get; set;} 
    private string FileName2 {get; set;} 
    
    private void SetFileName1() 
    { 
        FileName1 = Path.GetFileNameWithoutExtension(textBox1.Text); 
    } 
    private void SetFileName2() 
    { 
        FileName2 = Path.GetFileNameWithoutExtension(textBox2.Text); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
        SetFileName1(); 
        SetFileName2(); 
    
        string filez1 = FileName1; 
        string filez2 = FileName2; 
    } 
    

    그러나, 당신이 심판에 의해 값을 설정할 수 있습니다 : 나는 특성에 부분 해요 때문에, 나는 예제로 사용할 수 있습니다

  • +0

    당신은 성자입니다. – tenfour