当前位置:编程学习 > C#/ASP.NET >>

根据参数返回一个指定类型变量的古怪问题

参数有2个:
P1是string类型,值像“string”/"int"/"decimal".指示的是返回的变量的类型。
P2也是string类型,它的值是返回的变量的值的文本化。比方说“A”/"123"/"12.3"
比方说P1="decimal",P2="12.3"
那么返回的是一个decimal类型的对象,它的值为12.3
怎么设计这个函数

--------------------编程问答-------------------- 学习。不明白楼主说什么 --------------------编程问答-------------------- 有点像反序列化,但要比反序列化要灵活一些的做法。 --------------------编程问答--------------------

    private void button1_Click(object sender, EventArgs e)
    {
        double d = Convert<double>("1234");
        Color c = Convert<Color>("Yellow");
    }
    // 方法一
    static T Convert<T>(string str)
    {
        TypeConverter converter = TypeDescriptor.GetConverter( typeof(T) );
        if (converter != null && converter.CanConvertFrom(typeof(string)))
        {
            return (T)converter.ConvertFrom(str);
        }
        return default(T);
    }


    // 方法二,如果传入string typeName,可以Type targetType = Type.GetType( typeName )
    static object Convert(Type targetType, string str)
    {
        TypeConverter converter = TypeDescriptor.GetConverter(targetType);
        if( converter != null && converter.CanConvertFrom( typeof(string) ))
        {
            return converter.ConvertFrom( str );
        }
        return null;
    }
--------------------编程问答--------------------
引用 3 楼 gomoku 的回复:
C# code
    private void button1_Click(object sender, EventArgs e)
    {
        double d = Convert<double>("1234");
        Color c = Convert<Color>("Yellow");
    }
    // 方法一
    static T Convert<T>(string str)
    {
        TypeConverter converter = TypeDescriptor.GetConverter( typeof(T) );
        if (converter != null && converter.CanConvertFrom(typeof(string)))
        {
  …


因为类型也不知道,尤其是只能用string来描述类型,我卡就卡在这了
但仍然十分感谢你的代码 --------------------编程问答-------------------- 你能“用string来描述类型”怎么会“类型也不知道”? --------------------编程问答--------------------          string str = "int";
         string p = "12.3";
            
           if (str =="decimal")
                Console.WriteLine(Convert.ToDecimal( p));
            else if(str=="int")
                Console.WriteLine(Convert.ToInt32(p));
            
            Console.Read(); --------------------编程问答-------------------- 那你只能返回object类型. --------------------编程问答-------------------- 这个是你期望的解决方式,但是你到底想解决什么样的问题呢, --------------------编程问答-------------------- 用最笨的方式吧,如下

参数string type
参数string value

if(type.trim() == "double")
  {
     double v;
     if(double.Trypars(value,out v))
       return (object)v;
  }
else if(...)
{
... --------------------编程问答-------------------- 刚才的返回值 为object类型的
语言用的是c#
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,