为什么在呼叫站点未更新的方法中更新字符串?

Álv*_*cía 0 c# extension-methods

我有这个方法:

    namespace MyProject.String.Utils
    {
        public static class String
        {
            public static void formatDecimalSeparator(this string paramString)
            {
                try
                {
                    if (System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator == ",")
                    {
                        paramString = paramString.Replace(".", ",");
                    }
                    else
                    {
                        paramString = paramString.Replace(",", ".");
                    }
                }
                catch
                {
                    throw;
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

string myString = "1.23";
myString.formatDecimalSeparator();
Run Code Online (Sandbox Code Playgroud)

结果不是"1,23".变量未更新.所以我必须更改方法以返回一个字符串并将返回值赋给同一个变量.

为什么变量未在呼叫站点更新?扩展方法获取变量的值paramString,我可以在方法中更改它,但在主代码中变量不会更改?

Nik*_*wal 6

您需要将返回类型设置为字符串.

public static string formatDecimalSeparator(this string paramString)
{
    try
    {
        if (System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator == ",")
            return paramString.Replace(".", ",");
        else
            return paramString.Replace(",", ".");
     }
     catch
     {
         throw;
     }
 }
Run Code Online (Sandbox Code Playgroud)

然后你必须分配返回的变量:

myString = myString.formatDecimalSeparator();
Run Code Online (Sandbox Code Playgroud)

字符串是不可变的.只要在字符串中进行任何更改,就会返回带有更改的新实例.Read String是不可变的.究竟是什么意思?.

尝试和测试

在此输入图像描述

  • 方法返回void,那么你想要如何将它分配给字符串呢? (2认同)