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. C/S通信模型和相关技术要点

    差点儿全部的项目中,都会涉及到client和服务端.而client与server之间的通信又是一个非经常见但又有须要问题的技术问题. 首先,连接方式有长连接和短连接.先看看概念. 长连接短连接仅仅是一 ...

  2. jQuery 完成ajax传jsonObject数据,并在后台处理

    效果图: 1.js文件封装的几个js工具 <span style="font-family:KaiTi_GB2312;font-size:18px;">//兼容ie i ...

  3. 妙用perfmon Alert抓dump

    抓dump文件,经常是解决众多疑难杂症的不二手段.但是很多时候,我们没办法抓.比如说 几秒内的线程数暴涨200个,然后迅速回落 程序跑了两天,内存涨到某个数字就自己OOM了 原因不外乎都是时间短,没有 ...

  4. Swift编程语言学习1.3——类型安全和投机型

    Swift 是类型安全(type safe )语言.类型安全的语言可以让你清楚地知道代码被处理值类型.假设你需要一个代码String.你绝对不能进去一个不小心传球Int. 因为 Swift 它是类型安 ...

  5. ZOJ 3820 Building Fire Stations

    题意: 树上找两个点  使得其它点到这两点随意一点的距离的最大值最小 思路: 最大值最小  想到二分  在二分的基础上判定这个最大值是否可能 怎样判定这个问题就是怎样选那两个点的问题  非常明显  我 ...

  6. Android+NDK+OpenGLES开发环境配置

    1.资源 (1).Android的eclipse开发环境 我用adt-bundle-windows-x86.官方主页就能下载.这是一个打包的版本号,直接执行eclipse.exe你可以开始 (2).N ...

  7. 当向后台插入或读取JSON数据遇见回车时

    今天在项目中发现.当插入或读取JSON数据时遇见回车符.返回JSON数据格式时会报错(firebug里体现为乱码),百度了一下发现JSON不支持字符串里存在回车! 解决的方法: 在向接口插入带json ...

  8. 模拟Vue之数据驱动3

    一.前言 在"模拟Vue之数据驱动2"中,我们实现了个Observer构造函数,通过它可以达到监听已有数据data中的所有属性. 但,倘若我们想在某个对象中,新增某个属性呢? 如下 ...

  9. Maven构建Hadoop

    Maven构建Hadoop工程 阅读目录 序 Maven 安装 构建 示例下载 系列索引 序 上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant来管理工 ...

  10. 安卓模拟器错误: Could not open

    在进行android模拟器測试的时候,出现下面错误,进度条满了之后就没反应了.图例如以下: 引起这个问题的可能原因有非常多: 原因一:由于我们採用的是绝对路径定位.也就是说在环境变量里面把路径写死了, ...