using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq; namespace System.Web.Mvc
{
    #region 通用函数
    /// <summary>
    /// 通用函数
    /// </summary>
    public class Common
    {
        #region IP地址转换
        /// <summary>
        /// 将IP地址转换为数值
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public static long Ip2Long(string ip)
        {
            var ipaddr = ip.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
            if (ipaddr.Length == 4)
            {
                var ipvals = ipaddr.Select(p => int.Parse(p)).ToList();
                if (ipvals[0] >= 0 && ipvals[0] <= 255
                && ipvals[1] >= 0 && ipvals[1] <= 255
                && ipvals[2] >= 0 && ipvals[2] <= 255
                && ipvals[3] >= 0 && ipvals[3] <= 255)
                    return (long)ipvals[0] << 24 + ipvals[1] << 16 + ipvals[2] << 8 + ipvals[3];
            }
            return -1;
        }         /// <summary>
        /// 将IP地址转换为字符串
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public static string Ip2String(long ip)
        {
            var ipvals = "";
            ipvals = (ip % 256).ToString();
            ip = ip / 256;
            ipvals = (ip % 256).ToString() + "." + ipvals;
            ip = ip / 256;
            ipvals = (ip % 256).ToString() + "." + ipvals;
            ipvals = (ip / 256).ToString() + "." + ipvals;
            return ipvals;
        }         /// <summary>
        /// Server.PapPath()重写
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string MapPath(string path)
        {
            var currentDir = AppDomain.CurrentDomain.BaseDirectory;
            path = path.Replace("~", currentDir);
            path = System.IO.Path.GetFullPath(path);
            return path;
        }         public static void Log(Exception ex)
        {
            Log(ex.ToString());
        }         public static void Log(string ex)
        {
            var fd = Common.MapPath("~/Logs/");
            if (!System.IO.Directory.Exists(fd)) System.IO.Directory.CreateDirectory(fd);             var fp = fd + string.Format("l_{0:yyyyMMddHH}.log", DateTime.Now);
            using (var f = System.IO.File.AppendText(fp))
            {
                f.Write(ex);
            }
        }
        #endregion         #region 枚举通用函数
        /// <summary>
        /// 获取枚举类型列表
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <returns></returns>
        public static SortedList GetEnumList<T>()
        {
            var t = typeof(T);
            SortedList sl = new SortedList();
            Array a = Enum.GetValues(t);
            for (int i = 0; i < a.Length; i++)
            {
                string name = a.GetValue(i).ToString();
                int key = (int)a.GetValue(i);
                string desc = GetEnumDesc<T>(key);
                sl.Add(key, desc);
            }
            return sl;
        }         /// <summary>
        /// 获取枚举类型名称
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="enumValue">枚举值</param>
        /// <returns></returns>
        public static string GetEnumName<T>(object enumValue)
        {
            try
            {
                return Enum.GetName(typeof(T), enumValue);
            }
            catch
            {
                return "NA";
            }
        }         /// <summary>
        /// 获取枚举类型描述
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="enumValue">枚举值</param>
        /// <returns></returns>
        public static string GetEnumDesc<T>(object enumValue)
        {
            try
            {
                var t = typeof(T);
                DescriptionAttribute[] attrs = (DescriptionAttribute[])t.GetField(GetEnumName<T>(enumValue)).GetCustomAttributes(typeof(DescriptionAttribute), false);
                return ((attrs.Length > 0) ? attrs[0].Description : GetEnumName<T>(enumValue));
            }
            catch
            {
                return "NA";
            }
        }
        #endregion             }
    #endregion
}

C#记录日志、获取枚举值 等通用函数列表的更多相关文章

  1. 获取枚举值上的Description特性说明

    /// <summary> /// 获取枚举值上的Description特性说明 /// </summary> /// <typeparam name="T&q ...

  2. c# 枚举的定义,枚举的用法,获取枚举值

    1.定义枚举类型 public enum Test { 男 = , 女 = } 2.获取枚举值 public void EnumsAction() { var s = Test.男;//男 var a ...

  3. C# .NET 获取枚举值的自定义属性(特性/注释/备注)信息

    一.引言 枚举为我看日常开发的可读性提供的非常好的支持,但是有时我们需要得到枚举值得描述信息或者是注释(备注)信息 比如要获得 TestEmun.aaa 属性值得备注 AAA,比较不方便得到. pub ...

  4. C# .NET 获取枚举值的自定义属性

    一.定义一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  5. C# 获取枚举值/获取名字和值

    枚举 int 转 枚举名称 public void Test() { //调用 string name1= ConvertEnumToString<ActionLogType>(1); s ...

  6. C#枚举扩展方法,获取枚举值的描述值以及获取一个枚举类下面所有的元素

    /// <summary> /// 枚举扩展方法 /// </summary> public static class EnumExtension { private stat ...

  7. OSS.Common获取枚举字典列表标准库支持

    上篇(.Net Standard扩展支持实例分享)介绍了OSS.Common的标准库支持扩展,也列举了可能遇到问题的解决方案.由于时间有限,同时.net standard暂时还没有提供对Descrip ...

  8. c#枚举 获取枚举键值对、描述等

    using System; using System.Collections.Generic; using System.Collections.Specialized; using System.C ...

  9. c#枚举值增加特性说明

    c#枚举值增加特性说明 通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示. 自定义打印特性 [AttributeUsage(AttributeTargets.Field)] public ...

随机推荐

  1. Android复制iPhone日期和时间选择器

    看效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fi ...

  2. 如何使用SQLite数据库 匹配一个字符串的子串?

    select * from table_name where 字符串 like '%'||列名||'%'

  3. StackExchange.Redis Client

    StackExchange.Redis Client 这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓 ...

  4. SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试(转)

    听说JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以想试试到底平时是选择SynchronousQueue还是其他BlockingQueue. 对于容器类在并发环境下的比 ...

  5. Android 布局管理器

    为了更好地管理Android应用程序的用户界面组件,Android它提供了一个布局管理.通过使用布局管理,Android具有良好的平台无关的图形用户界面应用程序. 平时,推荐布局管理器来管理分布式组件 ...

  6. javascript基金会——鼠标事件,系统对话框,等等。

    1.鼠标事件 (1).onclick:用户点击鼠标左键,并且当焦点处于button准时,按用户Enter关键,发生onclick事件 (2).ondblclick:当用户双击鼠标左键.发生ondblc ...

  7. JavaScript高级编程

             原文地址: http://www.onlamp.com/pub/a/onlamp/2007/07/05/writing-advanced-javascript.html Web应用程 ...

  8. SWTBOK实践测试系列(2) --您将提交测试开发者版本号打回来了?

    开发商斗争非常多晚,提交测试的最终版本. 它们可以缓和.但噩耗传来很快,软件没有通过预测试测试团队(为了确保在测试过程,开发者提交的代码验证的基本功能或业务流程).开发王经理.快速找到负责预测试试验张 ...

  9. Linux的NTP配置总结(转)

    在Linux系统中,为了避免主机时间因为在长时间运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的.Linux系统下,一般使用ntp服务来同步不同机器的时间.NTP 是网 ...

  10. 具体解释首页被K后SEOer必做的三大排除方法!

    近段时间.有非常多朋友向新辰抱怨说出大问题了,为神马site不到首页了,并且收录变成了0?唉,新辰不得不非常同情的告诉你:你的首页真的被K了!好了.作为一个职业SEOer.面对被K宛如已经看破红尘般没 ...