我无法弄清楚为什么这个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");
}
它应该做的是将textBox4中的文件扩展名替换为相反的文件扩展名,在这种情况下,我正在制作一个XWM到Wav转换器。因此,如果textbox2和textBox4包含相同的文件扩展名,它会将textBox4中的文件扩展为另一种文件类型。
为什么不工作?
PS:我是C#的菜鸟,所以尽可能地向菜鸟解释
答案 0 :(得分:9)
字符串是不可变的,这意味着,你必须改变它们的方式是重新分配它们。
textBox4.Text = textBox4.Text.Replace(".wav", ".xwm");
一种知道的方法是查看函数的(替换)原型,它返回一个字符串,所以这可能意味着实例,即:textbox4.text不会被更改。
答案 1 :(得分: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");
}
(我怀疑有更好的方式来表达你想要实现的目标,但目前我们还不知道那是什么......)
答案 2 :(得分:2)
我猜你在下面的检查中做错了: -
textBox4.Text = textBox4.Text.Replace(“。xwm”,“。wav”);
嗯,如果默认声明采用你的第一个声明,并允许你输入是否为真。
所以最终代码如下: -
if(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"); }
答案 3 :(得分:0)
扩展Jon Skeet的回答:
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
命名空间提供的方法。