是转换线程的扩展方法安全

时间:2017-12-19 20:25:22

标签: c# c#-4.0 thread-safety extension-methods c#-6.0

请考虑以下代码:

public static int ToInt (this string str)
{
    return Convert.ToInt32 (str);
}

我应该使用lock作为此声明吗?

编辑1)

public static int ToInt(this string str)
{
    int Id = -1;
    if (str.IsEmpty() == true ||
        int.TryParse(str.Trim().Replace(",", ""), out Id) == false)
    {
        throw new Exception("Invalid Parameter: " + str);
    }
    else
    {
        return Id;
    }         
}

这个方法也是线程吗?

1 个答案:

答案 0 :(得分:6)

不,不需要锁定。

string是不可变的;因此,当您尝试解析它时,另一个线程无法更改其内容。

它与扩展方法没有任何关系;根据他们的工作(或他们采取的参数),这些可能是也可能不是线程安全的。

除了;除非lock在代码的其他地方得到尊重;这样做不会改变任何东西......(同样,至少对于这种方法而言)