zoukankan      html  css  js  c++  java
  • 工作中常用的.net基础知识

    1.get和set

    public class person

    {

      public string name;

    }

    public class person

    {

      public string Name{set;get;}

    }

    两个类,第一个类name属性未封装,其name属行通过public关键字暴露给系统中的其他类,
    第二个类的name属性通过get set关键字进行了封装。
    区别:实例化第一个person这个类时,系统在分配空间时对name属性直接分配内存,之后对name属性的操作也是直接操作内存中name属性所在的这个块;
    实例化第二个类时,系统会先分配一个叫name的private私有的内存空间,之后的读和写的操作都是通过name这个public的类似于指针的东西来关联name进行,达到封装的
    目的。

    private string name;
    public string Name

    {

    get { return name; }

    set

     {

    name = String.IsNullOrEmpty(value) ? "空" : value;//可用表达式控制读取的值

     }

    }

    2.Split和ToCharArray的区别:

    (1)split是根据你需要按照的分隔符来分割的,比如:String a = "avc,d,e,s,f"; String []b = a.split(',');这个就是根据逗号将数据分开,遍历输出得到的b的对象
    为"avc","d","e","s","f"。

    (2)toCharArray是将String对象的每一个下标位的对象保存在char[]中,比如:String a = "abcd"; char[] b = a.toCharArray(); 这个b保存的信息就是['a','b','c','d'] 。

    3.int.Parse()和int.TryParse()的区别:

      int.Parse()是一种类容转换;表示将数字内容的字符串转为int类型。 如果字符串为空,则抛出ArgumentNullException异常; 如果字符串内容不是数字,则抛出
      FormatException异常; 如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常;
      int.TryParse 与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。

      最后一个参数为输出值,如果转换失败,输出值为 0
      int.TryParse(n1.Text, out P_int_Number)

    4.Type.IsGenericTypeDefinition 属性

      获取一个值,该值指示当前 Type 是否表示可以用来构造其他泛型类型的泛型类型定义。
      如果此 true 对象表示泛型类型定义,则为 Type;否则为 false。

    5.HasValue 返回的结果是bool类型

      只可以判断 用来判断可空类型是否有除了null以外的值 有则返回true否则就返回 false

    6.xmlns,xmlns:xsi,xsi:schemaLocation

      xmlns:全名是xml namespace,也即是为当前的这个xml指定命名空间,因为xml的标签可自定义,需要命名空间来区分。
      假如这两个 XML 文档被一起使用,由于两个文档都包含有定义相同的的 元素,就会发生命名冲突。XML 解析器是无法确定如何处理这类冲突。为了解决上述问题,xmlns就产
      生了。

      xmlns:xsi:全名xml schema instance,是指当前xml所要遵循的标签规范.

      xsi:schemaLocation:指定的命名空间对应的验证文件,用来定义xml schema的地址,也就是xml书写时需要遵循的语法,用于声明了目标命名空间的模式文档。
      两部分组成,前面部分就是命名空间的名字,后面是xsd(xmlschema)的地址,也是就表示把定义这个命名空间的schema文件给引用进来,
      好让eclipse这类型工具能够解析和验证你的xml文件是否符合语法规范。等同于。用于声明了目标命名空间的模式文档。

    7.System.Web.HttpContext.Current.Response.AddHeader

      AddHeader()是明确告诉浏览器,下一步处理的指示,比如这是一个下载文件,是打开还是下载,有多少长度,什么格式。
      在服务器端可以多次添加header ,header的处理,应该在内容数据发送之前(写入文件字节流之前)
      通过Response.Flush() or End() 方法可以将标头发送到客户端。未发送之前,如果是缓存模式,add不会立即发送出去,可以clear()。

    8.break continue

      由此说明break只能跳出一个循环,(如果是在内循环中 则结束内循环 如果是在外循环中 则内外都结束了.)
      break是结束当前循环,
      continue是结束本次循环,进行下次循环,
      使用break就已经不再循环了
      使用continue还要继续进行循环

    9.toggle() 方法切换元素的可见状态

      如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素。
      该效果适用于通过 jQuery 隐藏的元素,或在 CSS 中声明 display:none 的元素(但不适用于 visibility:hidden 的元素)。

    10.StartWith(value)

      判定一个字符串对象是否以另一个子字符串开头,如果是返回true;否则返回false。

    11.SubString的用法:

      如果传入参数为一个长整, 且大于等于0,则以这个长整的位置为起始,截取之后余下所有作为字串.如若传入值小于0,系统会抛出ArgumentOutOfRange异常,表明参数范围出界
      如果传入了两个长整参数,前一个为参数子串在原串的起始位置,后一个参数为子串的长度,如不合条件同样出现上述异常

    12.Path.Combine 方法 (String,?String)

      将两个字符串组合成一个路径。

    13.ISNULL 使用指定的替换值替换 NULL(sql)

      语法 :ISNULL ( check_expression , replacement_value )
      check_expression 将被检查是否为 NULL的表达式。如果不为NULL,这直接返回 该值,也就是 check_expression 这个表达式。
      如果为空这个直接返回 replacement_value这个表达的内容。
      check_expression 可以是任何类型的。

    14.replace函数(SQL)

      用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。

      语法:REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )

    15.sql server中,N''表示什么意思

      加上 N 代表存入数据库时以 Unicode 格式存储。N'string' 表示string是个Unicode字符串

    16.在存储过程中,经常用到SET NOCOUNT ON;

      作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息。

      当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数;

    17.Dictionary 是 由 KeyValuePair结构 组成的集合

      foreach( KeyValuePair<string, string> kvp in myDictionary )
      {
         Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
      }

    18.比较时间差

      (thirdPartyUserInfoList.LoginTime-DateTime.Now).TotalMinutes>10(分钟)

    19.使用TimeSpan,实现倒计时

    /// <summary>
    /// 时间倒计时
    /// </summary>
    /// <param name="orderInfo"></param>
    /// <returns></returns>
    private static string TiameCountDown(OrderInfo orderInfo)
    {
      string time = string.Empty;
    
    if (orderInfo.Payment.IsNet == 1)
    {
      TimeSpan ts = orderInfo.SOMaster.OrderDate.AddHours(1) - DateTime.Now;
      if (ts.TotalSeconds < 0)
      {
        ts = TimeSpan.Zero;
      }
      time = ResourceHelper.BuildContent("MobileOrderDetail_Status11") + ts.Hours + "小时" + ts.Minutes + "分";//获取ts的小时,获取ts的分钟
    }
    else if (orderInfo.Payment.IsNet == 0)
      {
        TimeSpan ts = orderInfo.SOMaster.OrderDate.AddDays(3) - DateTime.Now;
        if (ts.TotalSeconds < 0)
        {
          ts = TimeSpan.Zero;
        }
        time = ResourceHelper.BuildContent("MobileOrderDetail_Status11") + ts.Days + "天" + ts.Hours + "小时" + ts.Minutes + "分";//获取ts的天数,获取ts的小时,获取ts的分钟
      }
      return time;
    }
    

      

    20.WITH AS短语(sql)

      也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到。可以使SQL语句的可读性更高,也可以在UNION ALL的不 

      同部分,作为提供数据的部分。

      –-针对一个别名:
       with tmp as (select * from tb_name)
      -–针对多个别名:
      with
      tmp as (select * from tb_name),
      tmp2 as (select * from tb_name2),
      tmp3 as (select * from tb_name3),

      其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它

      其中tmp,tmp2,tmp3 是一个公用表表达式,该表达式在使用上与表变量类似,只是SQL Server 2005在处理公用表表达式的方式上有所不同。

      可以和union all一起使用

      WITH语句的优点:

      (1). SQL可读性增强。比如对于特定with子查询取个有意义的名字等。

      (2)、with子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能。

    21.SQL UNION 操作符

      UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

      请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
      UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

    22.sql 存储过程 output参数的使用

      output 就是这个存储过程返回的值 也可以说输出的值

    23.CHAR,VARCHAR,TEXT,NCHAR,NVARCHAR

    (1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空
    格填充,所以在读取的时候可能要多次用到trim()。

    (2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。
    VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关
    键是根据实际情况找到权衡点。

    (3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

    (4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,
    但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英
    文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、
    varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

    所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar

    它们的区别概括成:
    CHAR,NCHAR 定长,速度快,占空间大,需处理
    VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理
    NCHAR、NVARCHAR、NTEXT处理Unicode码

    24.partial 局部变量

    partial 表示这个类这里的代码只是一部分代码.
    你可以再另外的.cs文件中再写这个类的另外一部分代码
    Partial是局部类型的标志。局部类型可以实现将一个类、结构或接口分成几个部分,分别放在在几个不同的.cs文件中(当然也可以放在同一个.cs文件中)。
    在程序进行编译之后,将会合并成一个完整的类。因此局部类型并没有看起来那么难以理解,使用partial只是让类变得更容易管理,实际使用时和普通的类一样。

    25.TimeZone.CurrentTimeZone

    在工作中我们遇到国际化时,经常要处理时区问题。这两个类都是处理时区的我们应该怎样选择呢?

    TimeZone 类来检索有关当前时区的信息,并将时间从本地时间转换为协调世界时 (UTC),也就是说这个类是用来处理LocalTimeZone和UTC时间的。

    TimeZoneInfo类可以处理系统上预定义的任何时区、创建新时区,以及轻松地将日期和时间从一个时区转换到另一个时区。从微软的官方提示上我们可以看出,TimeZone 类基本
    已经被TimeZoneInfo类取代了。

    DateTime start = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));

    26.Math.Abs

    确定一个数的绝对值如:math.Abs(-1),返回的是1,math.Abs(1),返回的值也是1

    27.Using System.Xml

    //初始化一个xml实例
      XmlDocument xml=new XmlDocment();

    //导入指定Xml文件
      xml.Load(path);
      xml.Load(HttpContent.Current.Server.MapPath("~file/bookstore.xml");

    //指定一个节点
    XmlNode root=xml.SelectSingleNode("~/root");

    //获取节点下所有直接子节点
    XmlNodeList childList=root.ChildNodes;

    //判断该节点下是否有子节点
    root.HasChildNode;

    //获取同名同级节点集合
    XmlElement node=xml.CreateElement("/Root/News");

    //生成一个新节点

    XmlElement node=xml.SelectNodes("News");

    /将节点加到指定节点下,作为其子节点
    root.AppendChild(node);

    //将节点加到指定节点下某个子节点前
    root.InsertBefore(node,root.ChildeNodes[i]);

    //为指定节点的新建属性并赋值
    node.SetAttribute("id","11111");

    //为指定节点添加子节点
    root.AppendChild(node);

    //获取指定节点的指定属性值
    string id=node.Attributes["id"].Value;

    //获取指定节点中的文本
    string content=node.InnerText;

    //保存XML文件
    string path=Server.MapPath("~/file/bookstore.xml");
    xml.Save(path);

    28.将虚拟路径转化为物理路径

    HttpContext.Current.Server.MapPath("路径");

    29.HashTable、HashSet、Dictionary,HasMap

    HashTable:哈希表(HashTable)表示键/值对的集合。在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,
    用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。
    Hashtable中key-value键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对,任何非 null 对象都可以用作键或值。

    在哈希表中添加一个key/键值对:HashtableObject.Add(key); 
    在哈希表中去除某个key/键值对:HashtableObject.Remove(key);
    从哈希表中移除所有元素: HashtableObject.Clear();
    判断哈希表是否包含特定键key: HashtableObject.Contains(key);

    HashSet:HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。
    HashSet是一个无序的能够保持唯一性的集合。我们也可以把HashSet看作是Dictionary<TKey,TValue>,只不过TKey和TValue都指向同一个对象。内部实现和Dictionary非常相似

    HashSet非常适合在我们需要保持集合内元素唯一性但又不需要按顺序排列的时候。。
    a. HashSet<T>中的值不能重复且没有顺序。(HashSet竟然是借助HashMap来实现的,利用HashMap中Key的唯一性,来保证HashSet中不出现重复值。)
    b. HashSet<T>的容量会按需自动添加。

    Dictionary;Dictionary表示键和值的集合。Dictionary<string, string>是一个泛型
    他本身有集合的功能有时候可以把它看成数组,他的结构是这样的:Dictionary<[key], [value]>
    他的特点是存入对象是需要与[key]值一一对应的存入该泛型,通过某一个一定的[key]去找到对应的值

    HashTable和Dictionary的区别:
    (1).HashTable不支持泛型,而Dictionary支持泛型。
    (2). Hashtable 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和拆箱的操作,所以你可能需要进行一些类型转换的操作,而且对于int,float这些值类型
    还需要进行装箱等操作,非常耗时。
    (3).单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读
    取,
    (4)在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。

    HasTable和HasMap的区别:两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。
    1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
    2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
    3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样
    4.HashTable使用Enumeration,HashMap使用Iterator。
    5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

    30.什么是线程安全与非线程安全?

    线程安全就是在多线程环境下也不会出现数据不一致,而非线程安全就有可能出现数据不一致的情况

    31..List集合去重使用Lambda表达式

    var list_distinct=list_Persons.GroupBy(c=c.name).Select(c=>c.First());
    根据某一列进行分组,然后获取每一组的第一条数据

    32.Case When Then用法(sql)

    case 表达式
    when 值1 then 结果1
    when 值2 then 结果2
    else 结果3
    也有另一种形式
    case
    when 表达式1 then 结果1
    when 表达式2 then 结果2
    else 结果3

    33.存储过程判断删除,函数判断存在则删除

    IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[存储过程]') and OBJECTPROPERTY(ID, N'IsProcedure') = 1)

    DROP PROCEDURE [dbo].[存储过程]
    GO

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函数]') and xtype in (N'FN', N'IF', N'TF'))
    -- 删除函数
    drop function [dbo].[函数]
    GO

    34.存储过程分页用(sql)

    ROW_NUMBER() OVER (ORDER BY 字段 DESC) AS ROWNUMBER
    --ROW_NUMBER()函数将查询的数据排序后从1开始编码 AS T
    WHERE T.ROWNUMBER>@PageSize * (@PageIndex-1) ORDER BY RowNumber

    FOR EXAMPLE:

    SELECT TOP (@PageSize) FROM

    (SELECT ROW_NUMBER() OVER (ORDER BY SYSNO DESC) AS ROWNUMBER,COUPONCODESYSNO

    FROM @VouchTable) AS T

    WHERE T.ROWNUMBER>@PageSize*(@PageIndex - 1) ORDER BY ROWNUMBER

     35.SQL中where用and和or能做很多事情和判断

    AND (ISNULL(@CustomerID,0) = 0 OR T.CustomerSysNo = @CustomerID)


    36.DATEDIFF(SQL)

    DATEDIFF(datepart,startdate,enddate) 函数返回两个日期之间的时间。

    SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate //1

    37.关于Convert.ToInt32,Int.Parse和Int.TryParse强制转换的问题

    1)对于空值NULL,从运行报错的角度讲,(int)强制转换和int.Parse()都不能接受NULL;
    Convert.ToInt32()其实是在转换前先做了一个判断,参数如果为NULL,则直接返回0,否则就调用int.Parse()进行转换,
    int.TryParse()其实是对int.Parse()做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0;

    2)针对于浮点型的取舍问题,浮点型只有Convert.ToInt32()和(int)能进行转换,但是也是进行取舍了的,
    Convert.ToInt32()采取的取舍是进行四舍五入,而(int)则是截取浮点型的整数部分,忽略小数部分,
    例如Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而(int)1.5d还是返回1;

    3)关于溢出,将大的数据类型转换为小的数据类型时Convert.ToInt32()和int.Parse()都会报溢出错误,
    值对于Int32太大或太小,而(int)不报错,但是返回值为-1

    38.Distinct表示去掉重复的行(sql)

    在Select后面加Distinct

  • 相关阅读:
    SP3267 DQUERY
    P3808 【模板】AC自动机(简单版)
    What Are You Talking About HDU
    【博客同步】【微信首发】GC-server的安装与使用
    博客园界面背景及一些特效设置
    C# 常用特性(Attribute)
    CRC常用参数模型及C#代码实现
    简单实用算法——字节位序反转
    C#串口开发之SerialPort类封装
    C#泛型的类型参数约束
  • 原文地址:https://www.cnblogs.com/BounceGuo/p/9619556.html
Copyright © 2011-2022 走看看