ToInt32()是C#中的扩展方法吗?特别是Convert.ToInt32()

时间:2016-07-23 17:57:07

标签: c# c#-4.0 extension-methods

ToInt32()是C#中的扩展方法吗?特别Convert.ToInt32()

3 个答案:

答案 0 :(得分:4)

Convert.ToInt32()不是扩展方法,它是静态类Convert中的静态方法。

但是,您可以创建一个扩展方法来执行此操作:

public static class MyExtensions
{
    public static Int32 ToInt32(this object obj)
    {
        return Convert.ToInt32(obj);
    }
}

用法:

object obj = 5;

int five = obj.ToInt32();

答案 1 :(得分:3)

没有。扩展方法的存在理由是允许实例方法调用语法用于在类型外声明的方法。您会发现使用任何Convert.ToInt32方法都无法做到这一点。

例如,类型String没有ToInt32(String)成员方法。如果您想将String转换为Int32,您可以编写如下静态方法:

public static class StringConverters
{
    public static Int32 ToInt32(String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}

并称之为:

var n = StringConverters.ToInt32("12345");

或,(在某些情况下这是可以接受的)

using static StringConverters; 
…
var n = ToInt32("12345");

但是,如果要使用实例方法调用语法调用,则可以在非泛型,非嵌套的静态类中使用第一个参数this创建扩展方法作为静态方法:

public static class StringConverters 
{
    public static Int32 ToInt32(this String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}

并称之为:

var n = "12345".ToInt32();

String类型仍然没有ToInt32(String)成员。似乎ToInt32声明已扩展该类型。这就是为什么它被称为扩展方法。

答案 2 :(得分:1)

你可以在ToInt32()上按F12,你可以看到

namespace System
{
    public static class Convert
    {
        public static int ToInt32(object value);
    }
}

所以不是扩展而是静态

C#中的扩展名如下所示

public static int MethodName(this String str)
{
    ...
}