• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C# 小记

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  1. 关于显式实现接口:
    public class Color
    {
    	public static readonly Color Black = new Color(0, 0, 0);
    	public static readonly Color White = new Color(255, 255, 255);
    	public static readonly Color Red = new Color(255, 0, 0);
    	public static readonly Color Green = new Color(0, 255, 0);
    	public static readonly Color Blue = new Color(0, 0, 255);
    	private byte r, g, b;
    	public Color(byte r, byte g, byte b) {
    		this.r = r;
    		this.g = g;
    		this.b = b;
    	}
    }
    
    
    public class Point
    {
    	public int x, y;
    	public Point(int x, int y) {
    		this.x = x;
    		this.y = y;
    	}
    }
    public class Point3D: Point
    {
    	public int z;
    	public Point3D(int x, int y, int z): base(x, y) {
    		this.z = z;
    	}
    }
    
    对于显示接口实现,如:
    
    
    public class EditBox: IControl, IDataBound
    {
    	void IControl.Paint() {...}
    	void IDataBound.Bind(Binder b) {...}
    }
    
    
    则调用的时候,必须这样:
    
    EditBox editBox = new EditBox();
    editBox.Paint();						// Error, no such method
    IControl control = editBox;
    control.Paint();						// Ok
    
    
  2. C#基本数据类型的范围:
      sbyte 8位 -128~127 System.SByte 
      byte 8位 0~255 System.Byte 
      short 16位 -32768~32767 System.Int16 
      ushort 16位 0~65535 System.UInt16 
      int 32位 -2147483648~2147483 647 System.Int32 
      uint 32位 0~4294967295 System.Int32 
      long 64位 -9223372036854775808~9223372036854775807 System.Int64 
      ulong 64位 0~18 446 744 073 709 551 615 System.Int64 
    
  3. HttpException 类:描述在处理Http 请求期间发生的异常。
    
  4. && 表示短路,如果左侧为false,则不计算右边的值,而& 左右两边都要计算
  5. int i = 16;int j = i << 3;Console.WriteLine(j);上面的结果为:128。即16乘以2的3次方,以此类推int j = i << 8 即16乘以2的8次方
  6. int i = 32;int j = i >> 3;Console.WriteLine(j);上面的结果为:4。即32除以2的3次方,以此类推int j = i << 8 即16除以2的8次方
  7. C#根据一个包含了xml数据的字符串来操作:
    string userIdXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<users_getID_response xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://nt.discuz.net/api/\">130807</users_getID_response>";
                System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
                xmlDoc.LoadXml(userIdXML);
                System.Xml.XmlNodeList xmlNodeList = xmlDoc.GetElementsByTagName("users_getID_response");
                Console.WriteLine(xmlNodeList[0].InnerText);
                Console.ReadKey();
    
  8. 最简单的MD5加密,加密成16位密码,但加密成32位的密码(32位密码长度比16位长),因为32位的密码可以转换为16位,而16位则不能转为32位:
    /// <summary>
            /// MD5加密
            /// </summary>
            /// <param name="Code">需要加密的值</param>
            /// <returns>以加密的值</returns>
            protected string CreateMD5(string Code)
            {
                return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Code, "MD5").ToLower().Substring(8, 16);
            }
    
  9. int 的最大值是:2147483648 = 2*1024*1024*1024 = 2GB
  10. 关于数组的练习:
            static void Main(string[] args)
            {
                int[,] nums1 = { {1,2,3},{4,5,6} }; //声明一个3列,2行的多维数组
    
                Console.WriteLine(nums1.Length); //结果为6
                Console.WriteLine(nums1[0,2]);  //结果为3
    
                int[][] num2 = { 
                                new int[] { 1,2,3,4,5 },
                                new int[] { 2 },
                                new int[] { 4,5 },
                                new int[] { 2,3,9,5 }
                               };  //声明一个元素类型为Int 数组的交错数组
    
                Console.WriteLine(num2.Length); //结果为4
                Console.WriteLine(num2[3][2]); //结果为9
    
                int[] num3; //除非声明数组后,马上初始化,否则,必须用 new int[3]
                num3 = new int[3] { 13, 16, 19 }; // 错误写法:  num3 = { 13,16,19 }; 定义好数组后在初始化数值时需要new关键字。
    
                //错误:int[] nums=new int[3]{};
                //正确:int[] nums=new int[3]{1,2,3}; 初始化变量时如果指定了数组大小必须初始化数据,同时初始化的数据数量和指定的数组长度必须一样。
    
                string script = @"
                    <script type='text/javascript'>
                        alert('Hello World');
                    </script>
                ";
                Console.WriteLine(script);
    
                char a = 'a';  //97
                char f = 'f';  //102
                Console.WriteLine("f-a=" + (f - a));  //结果为5
            }
    
  11. 关于“??”操作符:
                string name = null;
                Console.WriteLine("姓名:" + name); //NULL
                Console.WriteLine("姓名:" + (name ?? (name = "张三"))); //语义:name 为空吗?如果为空,则给name赋值“张三”并且返回“张三”。最后打印:“姓名:张三”
                Console.WriteLine("姓名:" + name); //张三
    
  12. 在C#中得到一个字符串的MD5值
    //代码来自:http://www.cnblogs.com/fish-li/archive/2012/02/12/2348395.html
    
    public class AjaxDemo
    {
        [Action]
        public string GetMd5(string input)
        {
            if( input == null )
                input = string.Empty;
    
            byte[] bb = (new MD5CryptoServiceProvider()).ComputeHash(Encoding.Default.GetBytes(input));
            return BitConverter.ToString(bb).Replace("-", "").ToLower();
        }
    }
    

      

  13. 集合扩展类:
        /// <summary>
        /// 集合扩展类
        /// </summary>
        public static class CollectionExtendsions
        {
            /// <summary>
            /// 将字典集合转换为动态字典集合
            /// </summary>
            /// <typeparam name="TKey">字典的 Key</typeparam>
            /// <typeparam name="TValue">字典的 Value</typeparam>
            /// <param name="source">源字典</param>
            /// <returns></returns>
            public static Dictionary<dynamic, dynamic> Cast<TKey, TValue>(this Dictionary<TKey, TValue> source)
            {
                if (source == null)
                {
                    throw new ArgumentNullException("source");
                }
                Dictionary<dynamic, dynamic> result = new Dictionary<dynamic, dynamic>();
                foreach (var item in source)
                {
                    result.Add(item.Key, item.Value);
                }
                return result;
            }
        }

     

  14. UrlHelper
    public static class UrlHelper
    {
        // Methods
        public static Uri Combine(this Uri uri, string path)
        {
            string combined;
            string url = uri.ToString();
            if (url.EndsWith("/") && path.StartsWith("/"))
                combined = url + path.Substring(1);
            else
                combined = url + path;
            return new Uri(combined);
        }
    }

     

  15. 修改 C# 中的 Resource(资源)文件生成的代码的默认可见性为 public:右键你的 .resx 文件,在属性框中将 Custom Tool 改为 PublicResXFileCodeGenerator
  16. C# 产生多个相同的字符
            static void Main(string[] args)
            {
                string word = new string('a', 100);
    
                Console.WriteLine(word);
            }

     

  17. 匹配 Http 链接的正则表达式:
    http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

     

  18. C# 注释某个类或方法,换行显示文字。
            /// <summary>
            /// <para>拆分一个字符串行。如:a=1;b=2;c=3;d=4;</para>
            /// <para>此时可以调用: SplitString("a=1;b=2;c=3;d=4;", ';', '=');</para>
            /// <para>说明:对于空字符串,方法也会返回一个空的列表。</para>
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>

     

  19. Throw 和 Throw ex 的区别:堆栈信息的起始点不同,throw ex 会将到现在为止的所有信息清空,而 throw 则不会,但推荐进一步包装的异常,比如:throw new Exception("经过进一步包装的异常", ex);
    测试地址:http://www.cnblogs.com/JerryTian/archive/2012/09/24/2699459.html
  20. 在 C# 中,判断某个方法是否是直接或间接的继承至某个类。
    比如:HomeController 中有一个 Index 方法,判断这个 Index 方法是否是继承至 Controller。
    
    MethodInfo methodInfo = ?;
    
    methodInfo.GetBaseDefinition().DeclaringType.IsAssignableFrom(typeof(Controller))

     

  21. 用 base64 码显示图片
    <div>
        <p>
            下面是图片
        </p>
        <p>
            <img alt="sample" src="@Url.Content("~/Content/testImage.jpg")"/>
        </p>
    </div>
    @{
        string base64Data = Convert.ToBase64String(File.ReadAllBytes(Server.MapPath("~/Content/testImage.jpg")));
    }
    <div>
        <p>
            下面是图片编码后
        </p>
        <p>
            <img alt="sample" src="data:image/png;base64,@base64Data"/>
        </p>
    </div>

     

  22. 检查目标目录是否以目录分割字符结束如果不是则添加之
    // 检查目标目录是否以目录分割字符结束如果不是则添加之
    if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)
    {
        aimPath += Path.DirectorySeparatorChar;
    }

     

  23. C# 中复制文件夹下所有的子文件夹、文件到另一个目录
    /// <summary>
    /// 复制目录下的所有文件夹、子文件夹和文件到另一个目录。
    /// </summary>
    /// <param name="srcPath">源目录,比如:D:\sourceDir。备注:只复制 D:\sourceDir 下的所有</param>
    /// <param name="aimPath">目标目录,比如:D:\destDir。</param>
    public static void CopyDir(string srcPath, string aimPath)
    {
        // 检查目标目录是否以目录分割字符结束如果不是则添加之
        if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)
        {
            aimPath += Path.DirectorySeparatorChar;
        }
        // 判断目标目录是否存在如果不存在则新建之
        if (!Directory.Exists(aimPath)) Directory.CreateDirectory(aimPath);
        // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
        // 如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法
        // string[] fileList = Directory.GetFiles(srcPath);
        string[] fileList = Directory.GetFileSystemEntries(srcPath);
        // 遍历所有的文件和目录
        foreach (string file in fileList)
        {
            // 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
            if (Directory.Exists(file))
                CopyDir(file, aimPath + Path.GetFileName(file));
            // 否则直接Copy文件
            else
                File.Copy(file, aimPath + Path.GetFileName(file), true);
        }
    }

     

  24. // Make sure we have permission to read the XML data source and
    
    // throw an exception if we don't
    
    FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\users.xml");
    permission.Demand();

     

  25. C# 操作符重载的示例A:
    public static CPQuery operator +(CPQuery query, string s)
    {
        query.AddSqlText(s);
        return query;
    }

     

  26. 关于判断类型
    int obj = 10;
    IConvertible conv = obj as IConvertible;
                
    if (conv != null)
    {
        switch (conv.GetTypeCode())
        {
            case TypeCode.Boolean:
                break;
            case TypeCode.Byte:
                break;
            case TypeCode.Char:
                break;
            case TypeCode.DBNull:
                break;
            case TypeCode.DateTime:
                break;
            case TypeCode.Decimal:
                break;
            case TypeCode.Double:
                break;
            case TypeCode.Empty:
                break;
            case TypeCode.Int16:
                break;
            case TypeCode.Int32:
                break;
            default:
                break;
        }
    }
    else
    {
        //处理其他类型
    }

     

  27. 下面的代码是让内存溢出:
  28. System_linq_Dynamic 下载:https://files.cnblogs.com/Music/System_linq_Dynamic_Ref_Blog.zip
  29. 如图:
  30. 单元测试练习:
  31. 生成静态页原理
    /// <summary>
            /// 生成静态
            /// </summary>
            /// <param name="m">分,默认为3分钟</param>
            /// <returns></returns>
            public ContentResult Html(int? m)
            {
                try
                {
                    int Minute = 3;
                    if (m!=null)
                        Minute = (int)m;
                    string FileName = Server.MapPath("/")+"index.html";
                    FileInfo fi = new FileInfo(FileName);
                    //修改时间大于3 重新生成
                    if ((DateTime.Now - fi.LastWriteTime).Minutes >= Minute)
                    {
                        SiteCache.Remove(SiteCacheDataModels.SiteIndexKey);
                        string PageUrl =Request.Url.ToString().Replace(Request.RawUrl, "/")+"Default/Index";
                        //Response.Write(PageUrl);
                        WebClient wc = new WebClient();
                        wc.Credentials = CredentialCache.DefaultCredentials;
                        Byte[] pageData = wc.DownloadData(PageUrl);
                        using (StreamWriter streamWriter = fi.CreateText())
                        {
                            streamWriter.Write(System.Text.Encoding.UTF8.GetString(pageData));
                            streamWriter.Flush();
                        }
                        Response.Write("Success");
                    }
                }
                catch (Exception ex)
                {
                    Response.Write("<div style=\"display:none;\">" + ex.Message + "</div>");
                }
                return null;
            }

     

  32. 谢谢浏览...

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
关于C#HttpClient的请求发布时间:2022-07-13
下一篇:
delphi调用c#写的webservice中文出现乱码的问题发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap