首页 新闻 会员 周边 捐助

怎么根据基本类型的名字字符串,判断一个值是否在一个范围内

0
悬赏园豆:5 [已关闭问题]

应该是如下的函数

public static bool MyComparer(string type,object  v,string minValue,string maxValue)

其中type是System.Char,System.Int32,System.System.UInt16....等基本值类型(包括System.String)字符串表示形式

object v,是type类型的一个值

minValue和maxValue分别是type类型的值的字符串表示

如是调用

bool ret = MyComparer("System.Int32",2,"1","3");

那么ret = true;//因为1<2<3;

ret = MyComparer(("System.Int32",3,"1","2");

那么ret = false;//因为3 >2

现在请各位高手指点这个函数的实现。

mcjtcnblog的主页 mcjtcnblog | 初学一级 | 园豆:195
提问于:2009-06-04 23:44
< >
分享
其他回答(2)
0

我用反射写了一个,不需要指定 type ,程序会根据  v 自动判断,并进行比较。

  public static bool MyComparer(object v, string minValue, string maxValue)
        {
            IComparable comparableObj = v as IComparable;

            MethodInfo parseMethod = null;
            object min;
            object max;

            if (v is string)
            {
                min = minValue;
                max = maxValue;
            }
            else
            {
                foreach (MethodInfo mi in v.GetType().GetMethods(BindingFlags.Static | BindingFlags.Public))
                {
                    if (mi.Name == "Parse" && mi.GetParameters().Length == 1)
                    {
                        parseMethod = mi;
                        break;
                    }
                }

                if (parseMethod == null)
                {
                    throw new ArgumentException(string.Format("Invalid type: {0}", v.GetType()));
                }

                min = parseMethod.Invoke(null, new object[] { minValue });
                max = parseMethod.Invoke(null, new object[] { maxValue });
            }

            return comparableObj.CompareTo(min) >= 0 && comparableObj.CompareTo(max) <= 0;

        }

为此写了一篇个博客,网友们又提出了不少好的建议,我又做了一些改进。

见 http://www.cnblogs.com/eaglet/archive/2009/06/05/1496697.html

eaglet | 园豆:17139 (专家六级) | 2009-06-05 08:46
0

本想绕道用个 泛型 的方法解决这个问题,毕竟原则上可以在编译期间就杜绝类型错误。但查了查,貌似没有统一转换的接口,唉!如何解决静态方法的不可继承问题呢?或者有个 T Parse<T>(string value) 的方法。看来还是反射牛逼啊,偶尔躲不开啊。

陛下 | 园豆:3938 (老鸟四级) | 2009-06-05 09:55
0

    class MyComparer
    {
        public static bool Compare<T>(T value, T minValue, T maxValue) where T : IComparable
        {
            if (value.CompareTo(minValue) > 0 && value.CompareTo(maxValue) < 0)
            {
                return true;
            }
            return false;
        }
    }

麒麟.NET | 园豆:3614 (老鸟四级) | 2009-06-05 15:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册