这里我使用if,否则如果条件显示错误消息并使某些标签可见且不可见,但我试图使用三元运算符这样做但我对ternery运算符并不熟悉并且无法使用它我在if else代码中的所有条件。
因此,我的代码的任何帮助将受到高度赞赏。谢谢。
以下是我的代码
catch (Exception ex)
{
if (ex.Message == "Parent Menu Title Required")
{
metroLabel4.Visible = true;
metroLabel5.Visible = false;
metroLabel6.Visible = false;
metroLabel4.Text = ex.Message;
}
else if (ex.Message == "Menu Title Required")
{
metroLabel4.Visible = false;
metroLabel5.Visible = true;
metroLabel6.Visible = false;
metroLabel5.Text = ex.Message;
}
else if (ex.Message == "Form Name Required")
{
metroLabel4.Visible = false;
metroLabel5.Visible = false;
metroLabel6.Visible = true;
metroLabel6.Text = ex.Message;
}
else
{
metroLabel4.Visible = true;
metroLabel5.Visible = true;
metroLabel6.Visible = true;
metroLabel4.Text = "Parent Menu Title Required";
metroLabel5.Text = "Menu Title Required";
metroLabel6.Text = "Form Name Required";
}
}
答案 0 :(得分:1)
您的代码相当于:
const string ParMnuTitReq ="Parent Menu Title Required";
const string MnuTitReq ="Menu Title Required";
const string FrmNamReq ="Form Name Required";
string m = ex.Message;
metroLabel4.Visible = m != MnuTitReq && m != FrmNamReq;
metroLabel5.Visible = m != ParMnuTitReq && m != FrmNamReq;
metroLabel6.Visible = m != ParMnuTitReq && m != MnuTitReq;
// This can be done in the form designer
metroLabel4.Text = ParMnuTitReq;
metroLabel5.Text = MnuTitReq;
metroLabel6.Text = FrmNamReq;
你不需要三元表达。相反,您可以组合逻辑表达式。对于类型为Visible
的{{1}}属性,您可以直接分配逻辑表达式的结果。
您始终可以为标签指定相同的文字,因为如果文字不适用,它们将无法显示。您甚至可以删除最后3个代码行,而是在表单设计器中分配文本。这会将原来的23行代码(不包括仅带括号的行)减少到7。
如果您必须能够分配2个以上的不同值,则可以使用嵌套或链接的三元表达式。
bool
相当于
string t = x == 1 ? "case 1" : x == 2 ? "case 2" : x == 3 ? "case 3" : "other case";
答案 1 :(得分:0)
三元运算符不适合您的问题。它用于根据谓词:
将一个变量的值设置为两个值之一var thingToSet = predicateA ?
ifPredicateAIsTrue :
ifPredicateAIsFalse;
这与:
相同if (predicateA)
thingToSet = ifPredicateAIsTrue;
else
thingToSet = ifPredicateAIsFalse;
要嵌套三元表达式,请在要设置的值中放置一个新的三元表达式:
var otherThingToSet = predicateB ? (
predicateC ?
ifPredicateCIsTrue :
ifPredicateCIsFalse
) : (
predicateD ?
ifPredicateDIsTrue :
ifPredicateDIsFalse
);
这相当于:
if (predicateB)
{
if (predicateC)
otherThingToSet = ifPredicateCIsTrue;
else
otherThingToSet = ifPredicateCIsFalse;
}
else
{
if (predicateD)
otherThingToSet = ifPredicateDIsTrue;
else
otherThingToSet = ifPredicateDIsFalse;
}
正如您所看到的,这并不适合您的问题,因为您正在尝试根据异常消息设置多个变量的值。
更适合您的问题的是切换声明:
switch (ex.Message)
{
case "Parent Menu Title Required":
metroLabel4.Visible = true;
metroLabel5.Visible = false;
metroLabel6.Visible = false;
metroLabel4.Text = ex.Message;
break;
case "Menu Title Required":
metroLabel4.Visible = false;
metroLabel5.Visible = true;
metroLabel6.Visible = false;
metroLabel5.Text = ex.Message;
break;
case "Form Name Required":
metroLabel4.Visible = false;
metroLabel5.Visible = false;
metroLabel6.Visible = true;
metroLabel6.Text = ex.Message;
break;
default:
metroLabel4.Visible = true;
metroLabel5.Visible = true;
metroLabel6.Visible = true;
metroLabel4.Text = "Parent Menu Title Required";
metroLabel5.Text = "Menu Title Required";
metroLabel6.Text = "Form Name Required";
break;
}