2014-09-26 127 views
0

我不明白爲什麼這個If語句不起作用。爲什麼我的C#if語句代碼不工作?

if (textBox2.Text.Contains(".xwm") && textBox4.Text.Contains(".xwm") == true) 
{ 
    textBox4.Text.Replace(".xwm", ".wav"); 
} 
else if (textBox2.Text.Contains(".wav") && textBox4.Text.Contains(".wav") == true) 
{ 
    textBox4.Text.Replace(".wav", ".xwm"); 
} 

什麼它應該做的是相反的一個在這種情況下,我做一個XWM爲WAV轉換器替換textBox4文件擴展名。所以如果textbox2和textBox4包含相同的文件擴展名,它會將textBox4中的文件擴展名更改爲其他文件類型。

爲什麼它不工作。

PS:我在C#中的小白這樣解釋它作爲最好的,你可以到一個小白

+0

替換方法返回更改後的字符串。將其分配回「TextBox.Text」。 – 2014-09-26 05:30:13

+1

不相關:你可以通過分配'var txt2 = textBox2.Text'和'var txt4 = textBox4.Text'並使用這些來清理(美學)。另外,if語句條件中不需要'== true'。 – 2014-09-26 05:30:34

+0

FWIW:*避免*使用'x == false'或'x == true'或否定變體 - 特別是在使用不一致的情況下!這是因爲'x == true'在語義上等同於'x',其中'x'是一個布爾值。 – user2864740 2014-09-26 05:36:09

回答

9

字符串是不可變的,也就是說,你的方式必須改變他們是通過重新分配他們。

textBox4.Text = textBox4.Text.Replace(".wav", ".xwm"); 

一個知道的方法是看功能的(替代)的原型,它返回一個字符串,那麼這可能意味着該實例,即:textbox4.text是不會改變的。

+1

我想說的是「你必須改變它們的方式」令人困惑 - 它將「字符串對象的內容」(不能改變) )和「textBox4.Text'屬性(在本例中)」指的是哪個對象。 – 2014-09-26 05:35:00

2

我猜你做錯了下面點,辦理入住手續: -

  1. .Replace所以你需要如下把它寫方法返回的字符串: -

textBox4.Text = textBox4.Text.Replace( 「.WAV」 「XWM。」)

  • 那麼,如果默認的語句需要你的第一條語句,將允許你進入,如果它是真實的。

    所以最終的代碼將是如下: -

  • 如果(textBox2.Text.Contains( 「XWM。 」)& & textBox4.Text.Contains()「 XWM。」)

    { 
         textBox4.Text = textBox4.Text.Replace(".xwm", ".wav"); 
        } 
        else if (textBox2.Text.Contains(".wav") && textBox4.Text.Contains(".wav")) 
        { 
          textBox4.Text = textBox4.Text.Replace(".wav", ".xwm"); 
        } 
    
    +0

    哦,我的。謝謝你現在的作品。 =) – Brennan 2014-09-26 05:38:25

    +0

    更新回答@ user2864740 – Neel 2014-09-26 05:43:24

    +0

    很高興幫助@Brennan – Neel 2014-09-26 05:57:36

    5

    你對字符串進行調用Replace,但後來不這樣做,結果什麼。字符串在C#中是不可變的 - 任何聽起來像可能會改變字符串的方法實際上只是返回一個對新字符串的引用(如果不需要更改,可能會引用舊字符串)。所以調用Replace(或類似的方法),然後忽略結果總是毫無意義的。

    我懷疑你想:

    textBox4.Text = textBox4.Text.Replace(".xwm", ".wav"); 
    

    順便說一句,我也想擺脫== true的,而且很有可能提取所有的讀訪問到文本框:

    // Rename these as appropriate - and rename the textBox* variables so the names 
    // explain the purpose. 
    string source = textBox2.Text; 
    string target = textBox4.Text; 
    if (source.Contains(".xwm") && target.Contains(".xwm")) 
    { 
        textBox4.Text = target.Replace(".xwm", ".wav"); 
    } 
    else if (source.Contains(".wav") && target.Contains(".wav")) 
    { 
        textBox4.Text = target.Replace(".wav", ".xvm"); 
    } 
    

    (我懷疑有更好的方式表達你想要達成的目標,但目前我們不知道那是什麼......)

    0

    擴展在喬恩斯基特的回答是:

    string source = textBox2.Text; 
    string target = textBox4.Text; 
    
    Func<string, string, bool> func = (path, ext) => { 
        return ext.Equals(Path.GetExtension(path), StringComparison.InvariantCultureIgnoreCase); 
    }; 
    
    if (func(source, ".xwm") && func(target, ".xwm")) 
    { 
        textBox4.Text = Path.ChangeExtension(target, ".wav"); 
    } 
    else if (func(source, ".wav") && func(target, ".wav")) 
    { 
        textBox4.Text = Path.ChangeExtension(target, ".xvm"); 
    } 
    

    鑑於情況下,你真的不應該使用String.Replace - 它總是最好使用由System.IO命名空間中提供的方法。

    相關問題