繁体   English   中英

为什么我的C#如果语句代码不起作用?

[英]Why is my C# if statement code not working?

我不知道为什么这个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#的菜鸟,所以请尽量向菜鸟解释

字符串是不可变的,这意味着您必须更改它们的方法是重新分配它们。

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

一种知道的方法是查看函数的(替换)原型,它返回一个字符串,因此这很可能意味着该实例即textbox4.text不会被更改。

您正在对字符串调用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");
}

(我怀疑还有更多更好的方法来表达您要达到的目标,但目前我们不知道那是什么...)

我想您在以下几点进行检查时做错了:

  1. .Replace方法返回字符串,因此您需要按如下方式编写它:-

textBox4.Text = textBox4.Text.Replace(“。xwm”,“ .wav”);

  1. 好吧,如果默认情况下,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"); } 

扩展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命名空间提供的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM