c#参数没有返回新值

本文关键字:返回 新值 参数 | 更新日期: 2023-09-27 18:03:01

我有一个方法,它接受两个字符串参数,并允许在必要时更改第二个参数。利用切换案例,我想将其中一个变量的值更改为新值("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"中包含的字符串填充,而不是在变量字段中反映新的返回字符串。有人能解释一下为什么会这样吗?谢谢。

c#参数没有返回新值

修改行:

validateData("email", email);

:

email = validateData("email", email);

您正在返回email字符串的修改版本,因此需要将其重新分配给email

如果你想改进这一点,那么我实际上将值赋给一个新的变量,以记录它现在被验证的事实:

var validatedEmail = validateData("email", email);

最后,你的validateData方法不是一个好方法。它接受一个模式参数,并根据该参数的值执行一系列基本上不相关的函数。经验法则:一个方法应该只做一件事。如果您在参数上有ifswitch,那么将您的方法拆分为处理每种情况的单个方法。

你可以做string validEmail = validateData("email", email);返回一个修改过的邮件并不会改变原来的邮件。

值正在被传递和复制(按值传递)..通过引用(使用ref关键字)传递原语(如字符串)通常不是一个很好的做法,除非它们是对象——默认情况下是这样做的。

如果您想要更像oop的风格,请尝试避免静态方法和开关,并尽可能从对象的角度考虑。