扩展方法,根据对象类型返回数据类型

时间:2014-09-14 17:39:26

标签: c# extension-methods

大家好我计划编写一个扩展方法,它需要在同一个方法中处理每个数据类型并返回适当的方法。这就是我试过的

public static dynamic extension(this object o)
    {
        var v = o.GetType();
        switch (Type.GetTypeCode(o.GetType()))
        {
            case TypeCode.Int32:
                return intTryparse(o);
        }
    }

 private static int intTryparse(object o)
    {
        int retunrInt = 0;
        int.TryParse(Convert.ToString(o), out retunrInt);
        return retunrInt;
    }

但是我无法得到所需要的,所以有人可以帮助我吗?一种扩展方法,应该为int,string,decimal,double,boolean

等数据类型提供结果

这个方法我想通过传递一个对象来转换为一个方法

http://www.dailycoding.com/Posts/top_5_small_but_must_have_extension_methods.aspx

如果你看到那里的扩展方法需要很长时间才能返回Int16,Int32..我希望在一个方法中将所有扩展方法组合在一起并返回类似的代码应该适用于所提到的其余数据类型

1 个答案:

答案 0 :(得分:1)

首先,我猜你不需要它。尝试重新设计您的解决方案。

其次,给出的示例是将字符串转换为某些内容 某些内容转换为内容

我认为,这将满足您的需求:

public static class StringExtension
{

    public static T ConvertTo<T>(this string o)
    {

        if (typeof (T) == typeof (Int32))
            return (T) (object) Int32.Parse(o);
        if (typeof (T) == typeof (Int16))
            return (T) (object) Int16.Parse(o);
        if (typeof(T) == typeof(Double))
            return (T) (object)Double.Parse(o);
        if (typeof(T) == typeof(Boolean))
            return (T) (object)Boolean.Parse(o);
        if (typeof(T) == typeof(Decimal))
            return (T) (object)Decimal.Parse(o);

        throw new ApplicationException("Cannot convert to type " + typeof(T));
    }

}

使用:

var shortResult = "12".ConvertTo<Int16>();

另一种方法建议使用纯反射,因此它可以更漂亮,但也更慢。

同样,我绝对不建议你使用它!

UPD:

if (typeof (T) == typeof (Int32))
{
   Int32 result = 0;
   Int32.TryParse(o, out result);
   return (T) (object) result;                
}