C# 创建每次单击时更改字符串值的按钮

C# 创建每次单击时更改字符串值的按钮,c#,C#,我想创建一个按钮,每当我在C#中单击时,它都会更改字符串值 这是我的C#代码: 如果单击开关按钮,字符串值将从ja和更改为en。但是,如果我再次单击,则没有任何更改。我的代码有什么问题?为了清晰起见,我建议使用枚举 public enum Language { En_Ja, Ja_En } Language lang = Language.En_Ja; public void Switch(object sender, EventArgs e) { lang =

我想创建一个按钮,每当我在C#中单击时,它都会更改字符串值

这是我的C#代码:


如果单击开关按钮,字符串值将从ja和更改为en。但是,如果我再次单击,则没有任何更改。我的代码有什么问题?

为了清晰起见,我建议使用
枚举

public enum Language {
    En_Ja,
    Ja_En
}

Language lang = Language.En_Ja;

 public  void Switch(object sender, EventArgs e) {
     lang = lang == Language.En_Ja ? Language.Ja_En : Language.En_Ja;
 }
简短答复: HTTP请求需要初始化
from
to
字段。比如:

partial class Translator : Page
{
    string from, to;

    protected override void OnLoad(EventArgs e)
    {
         var to = Context.Request.QueryString["to"];
         var from = Context.Request.QueryString["from"];

         switch(from.ToUpper())
         {
             case "EN": { this.from = "en"; break; }
             case "JA": { this.from = "ja"; break; }
         }

         switch(to.ToUpper())
         {
             case "EN": { this.to = "en"; break; }
             case "JA": { this.to = "ja"; break; }
         }

         if(to == null) throw new Exception();
         if(from == null) throw new Exception();

    }
}
protected override void OnLoad(EventArgs e)
{
     var from = Context.Request.QueryString["from"];

     switch(from.ToUpper())
     {
         case "EN": { lang = LanguageSetting.English; break; }
         case "JA": { lang = LanguageSetting.Japanese; break; }
     }

     if(lang == null) throw new Exception();

}
详细回答: 这实际上是多态性的一个很好的用例:

/* C# 7 syntax */

abstract class LanguageSetting
{
    public static LanguageSetting English = JA.alt;
    public static LanguageSetting Japanese = EN.alt;        

    public abstract LanguageSetting Alternate { get; } 
    public abstract override string ToString();

    sealed class EN : LanguageSetting
    {
        public static readonly LanguageSetting alt = new JA();

        public override LanguageSetting Alternate => alt;
        public override string ToString() => "en"; 
    }

    sealed class JA : LanguageSetting
    {
        public static readonly LanguageSetting alt = new EN();

        public override LanguageSetting Alternate => alt;
        public override string ToString() => "js"; 
    }
}
然后您的
Submit()
Switch
方法就是:

void Submit(object Sender, EventArgs e)
{
    string from = lang.ToString();
    string to = lang.Alternate.ToString();

    string uri = "https://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + 
                  HttpUtility.UrlEncode(text) + "&from=" + from1 + "&to=" + to1;

}

最后,我们用如下方式初始化:

partial class Translator : Page
{
    string from, to;

    protected override void OnLoad(EventArgs e)
    {
         var to = Context.Request.QueryString["to"];
         var from = Context.Request.QueryString["from"];

         switch(from.ToUpper())
         {
             case "EN": { this.from = "en"; break; }
             case "JA": { this.from = "ja"; break; }
         }

         switch(to.ToUpper())
         {
             case "EN": { this.to = "en"; break; }
             case "JA": { this.to = "ja"; break; }
         }

         if(to == null) throw new Exception();
         if(from == null) throw new Exception();

    }
}
protected override void OnLoad(EventArgs e)
{
     var from = Context.Request.QueryString["from"];

     switch(from.ToUpper())
     {
         case "EN": { lang = LanguageSetting.English; break; }
         case "JA": { lang = LanguageSetting.Japanese; break; }
     }

     if(lang == null) throw new Exception();

}

您是否也在Page_Load事件中设置了这两个文本?您是否在下面保护了此设置!IsPostback?我不确定页面加载事件是什么以及IsPostback设置。我没有设置任何内容。如何初始化
from
to
字段?他们不应该从请求本身获取初始值吗?它是
&
,而不是
&
。同意,除了@Edwin Surya之外,还应该使用属性而不是公共字段。有关更多信息,请参阅。我不同意。我认为对于给定的上下文,awome先生的解决方案更具可读性。在给定的示例中,他只表明他想要“ja”和“en”的倒装。