Á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,我可以在方法中更改它,但在主代码中变量不会更改?
您需要将返回类型设置为字符串.
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是不可变的.究竟是什么意思?.
尝试和测试
