C# 参数不返回新值
C# Parameter not returning new value
我有一个方法接受两个字符串参数,并允许在必要时更改第二个。利用 switch case,我想将传递的其中一个变量的值更改为新值 ("INVALID.FORMAT@EMAIL.COM")。
string email ="jibberishtext";
string url = ...
validateData("email", email);
if (!email.Contains("INVALID"))
sendData(objAcctQryOut, "NET");
...
private static string validateData(string mode, string field)
{ ...
ElectronicAddressAddUpdateResponse eR = myClient.ElectronicAddressAddUpdate(upd, true, appId, pass);
switch (mode)
{
case "email":
if (eR.Result.Equals("SUCCESS"))
return field;
else
field = "INVALID.FORMAT@EMAIL.COM";
return field;
case "url":
...
case "phone":
...
case "fax":
...
}
return field;
}
我的问题是——在 validateData 方法中,第二个电子邮件变量返回填充电子邮件 "jibberishtext," 中包含的字符串,而不是在变量字段中反映新返回的字符串。有人可以解释为什么会这样吗?谢谢。
您可以 string validEmail = validateData("email", email);
返回修改后的电子邮件不会更改原始电子邮件。
正在传递和复制值(按值传递)。通过引用(使用 ref 关键字)传递基元(如字符串)通常不是一个很好的做法,除非它们是对象 - 即默认完成。
如果您想要更像 OOP 的风格,请尽量避免静态方法和开关,并尽可能从对象的角度考虑。
只需更改行:
validateData("email", email);
至:
email = validateData("email", email);
您返回的是 email
字符串的修改版本,因此需要重新分配给 email
。
如果您想对此进行改进,那么我实际上会将值分配给一个新变量,以记录它现在已经过验证的事实:
var validatedEmail = validateData("email", email);
最后,你的validateData
方法不是很好。它采用模式参数,并根据该参数的值执行一系列基本不相关的功能。经验法则:一个方法应该只做一件事。如果您在参数上有 if
或 switch
,则将您的方法拆分为处理每种情况的单独方法。
我有一个方法接受两个字符串参数,并允许在必要时更改第二个。利用 switch case,我想将传递的其中一个变量的值更改为新值 ("INVALID.FORMAT@EMAIL.COM")。
string email ="jibberishtext";
string url = ...
validateData("email", email);
if (!email.Contains("INVALID"))
sendData(objAcctQryOut, "NET");
...
private static string validateData(string mode, string field)
{ ...
ElectronicAddressAddUpdateResponse eR = myClient.ElectronicAddressAddUpdate(upd, true, appId, pass);
switch (mode)
{
case "email":
if (eR.Result.Equals("SUCCESS"))
return field;
else
field = "INVALID.FORMAT@EMAIL.COM";
return field;
case "url":
...
case "phone":
...
case "fax":
...
}
return field;
}
我的问题是——在 validateData 方法中,第二个电子邮件变量返回填充电子邮件 "jibberishtext," 中包含的字符串,而不是在变量字段中反映新返回的字符串。有人可以解释为什么会这样吗?谢谢。
您可以 string validEmail = validateData("email", email);
返回修改后的电子邮件不会更改原始电子邮件。
正在传递和复制值(按值传递)。通过引用(使用 ref 关键字)传递基元(如字符串)通常不是一个很好的做法,除非它们是对象 - 即默认完成。
如果您想要更像 OOP 的风格,请尽量避免静态方法和开关,并尽可能从对象的角度考虑。
只需更改行:
validateData("email", email);
至:
email = validateData("email", email);
您返回的是 email
字符串的修改版本,因此需要重新分配给 email
。
如果您想对此进行改进,那么我实际上会将值分配给一个新变量,以记录它现在已经过验证的事实:
var validatedEmail = validateData("email", email);
最后,你的validateData
方法不是很好。它采用模式参数,并根据该参数的值执行一系列基本不相关的功能。经验法则:一个方法应该只做一件事。如果您在参数上有 if
或 switch
,则将您的方法拆分为处理每种情况的单独方法。