使用Xml.Linq

 XML 格式:

<?xml version="1.0" encoding="utf-8"?>
<SalaryMap>
  <Salary unid="821B26E9FBA51DC9482579CD002811FE" name="青岛山东路营业部2012年2月营销人员薪酬申请表">
    <File>营销人员薪酬申请明细表.xls</File>
    <SalaryTypeName>01营销人员薪酬申请表</SalaryTypeName>
    <SalaryType>1</SalaryType>
    <Month>201202</Month>
    <BarchID></BarchID>
    <BarchName>青岛山东路营业部</BarchName>
  </Salary>

......

</SalaryMap>

 

 

 1. 写操作
 

 

private void SaveXmlMapData(List<SalaryInfo> salaryList)
        {
            XElement root = new XElement("SalaryMap");//XElement.Parse("<SalaryMap></SalaryMap>");
            
//var root = doc.Element("SalaryMap");
            foreach (var item in salaryList)
            {
                root.Add(new XElement("Salary",
                    new XAttribute("unid", item.UNID),
                    new XAttribute("name", item.Name),
                    new XElement("File", item.FileName),
                    new XElement("SalaryTypeName",item.SalaryTypeName),
                    new XElement("SalaryType", (int)item.SalaryType),
                    new XElement("Month", item.Month),
                    new XElement("BarchID", item.BarchID),
                    new XElement("BarchName",item.BarchName)
                    ));
            }
            root.Save(SalaryMapFilePath);
        }

 

 

 2.读取数据

public List<SalaryInfo> LoadXmlMapData()
        {
            List<SalaryInfo> salaryList = new List<SalaryInfo>();
            var xmlReader = new XmlTextReader(SalaryMapFilePath);
            if (xmlReader.ReadToDescendant("SalaryMap"))
            {
                var node = XDocument.Parse(xmlReader.ReadOuterXml()).Element("SalaryMap").Elements("Salary");
                foreach (XElement item in node)
                {
                    salaryList.Add(new SalaryInfo()
                    {
                        UNID=item.Attribute("unid").Value,
                        Name = item.Attribute("name").Value,
                        SalaryType = (SalaryTypeOptions)Enum.Parse(typeof(SalaryTypeOptions), item.Element("SalaryType").Value),
                        SalaryTypeName=item.Element("SalaryTypeName").Value,
                        FileName=item.Element("File").Value,
                        Month = item.Element("Month").Value,
                        BarchID = item.Element("BarchID").Value,
                        BarchName = item.Element("BarchName").Value
                    });
                }
            }
            return salaryList;
        }

 

 

 3. 替换/修改/删除 节点值

 

XElement root = XElement.Parse(@"  
                                   <Categories>  
                                      <Category>  
                                        <CategoryID>1</CategoryID>  
                                        <CategoryName>Beverages</CategoryName>  
                                        <Description>Soft drinks, coffees, teas, beers, and ales</Description>  
                                      </Category>  
                                    </Categories>  
                                  
");
            //替换节点
            root.Element("Category").Element("CategoryID").ReplaceWith(new XElement("ID""2"));
            //设置节点值
            root.Element("Category").SetElementValue("CategoryName""test data");
            //移除节点
            root.Element("Category").Element("Description").Remove();
            //添加节点
            root.Element("Category").Element("CategoryID").Add(new XElement("Desc"new XCData("中文test/")));
            Console.WriteLine(root.ToString());
            root.Save("test.xml"); 

 

posted @ 2012-05-25 15:46 Aleax 阅读(5) 评论(0) 编辑
在C#中可以对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位。C#支持的位逻辑运算符如表2.9所示。
运算符号
意义
运算对象类型
运算结果类型
对象数
实例
~
位逻辑运算
整型,字符型
整型
1
~a
&
位逻辑运算
2
a & b
|
位逻辑运算
2
a | b
^
位逻辑异或运算
2
a ^ b
<< 
左移运算
2
a<<4
>> 
右移运算
2
a>>2
 
1、位逻辑非运算
位逻辑非运算是单目的,只有一个运算对象。位逻辑非运算按位对运算对象的值进行非运算,即:如果某一位等于0,就将其转变为1;如果某一位等于1,就将其转变为0。
比如,对二进制的10010001进行位逻辑非运算,结果等于01101110,用十进制表示就是:
~145等于110;对二进制的01010101进行位逻辑非运算,结果等于10101010。用十进制表示就是~85等于176。
2、位逻辑与运算
位逻辑与运算将两个运算对象按位进行与运算。与运算的规则:1与1等于1,1与0等于0。
比如:10010001(二进制)&11110000等于10010000(二进制)。
3、位逻辑或运算
位逻辑或运算将两个运算对象按位进行或运算。或运算的规则是:1或1等1,1或0等于1,
0或0等于0。比如10010001(二进制)| 11110000(二进制)等于11110001(二进制)。
4、位逻辑异或运算
位逻辑异或运算将两个运算对象按位进行异或运算。异或运算的规则是:1异或1等于0,
1异或0等于1,0异或0等于0。即:相同得0,相异得1。
比如:10010001(二进制)^11110000(二进制)等于01100001(二进制)。
5、位左移运算
位左移运算将整个数按位左移若干位,左移后空出的部分0。比如:8位的byte型变量
byte a=0x65(即二进制的01100101),将其左移3位:a<<3的结果是0x27(即二进制的00101000)。

将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。
  左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。

  x<<1= x*2
  x<<2= x*4
  x<<3= x*8
  x<<4= x*16

 

6、位右移运算
 位右移运算将整个数按位右移若干位,右移后空出的部分填0。比如:8位的byte型变量
Byte a=0x65(既(二进制的01100101))将其右移3位:a>>3的结果是0x0c(二进制00001100)。

将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补0。

  右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8。

  x>>1= x/2
  x>>2= x/4
  x>>3= x/8
  x>>4=x/16

 

 
在进行位与、或、异或运算时,如果两个运算对象的类型一致,则运算结果的类型就是运算对象的类型。比如对两个int变量a和b做与运算,运算结果的类型还是int型。如果两个运算
对象的类型不一致,则C#要对不一致的类型进行类型转换,变成一致的类型,然后进行运算。
类型转换的规则同算术运算中整型量的转换则一致。
由位运算符连接整型量而成的表达式就是位运算表达式。


 

常用的位运算主要有与(&), 或(|)和非(~), 比如:

1 & 0 = 0, 1 | 0 = 1, ~1 = 0

在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理.

第一步, 先建立一个枚举表示所有的权限管理操作:

    [Flags]
    public enum Permissions{    
    Insert = 1,   
    Delete = 2,   
    Update = 4,   
    Query = 8
    } 

[Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用2的n次方来赋值, 这样表示成二进制时刚好是1 = 0001, 2 = 0010, 4 = 0100, 8 = 1000等, 每一位表示一种权限, 1表示有该权限, 0表示没有.

接下来是权限的运算:

1. 权限的加法, 使用与运算来实现. 我们知道, 0001 | 0100 = 0101, 这样就表示同时具有第一位和第三位的权限管理了, 枚举表示为:

  1. Permissions per = Permissions.Insert | Permissions.Update 

2. 权限的减法, 使用与运算+非运算来实现, 如上面要去掉Insert权限, 操作为:

  1. Permissions per &= ~Permissions.Insert即是 0101 & ~0001 = 0101 & 1110 = 0100 

3. 权限的判断, 使用与运算, 当判断用一用户是否具有该操作权限时, 要把用户的的权限与操作权限进行与运算, 如果得到的结果仍是操作权限管理, 则表示用户具有该权限:

    Permissions per = Permissions.Insert |  
    Permissions.Update;  
    if(per & PermissionsPermissions.Insert = Permissions.Insert)  
    {  
    //有操作权限    
    }

比较过程为 0101 & 0001 = 0001, 0001的0位用与C#位运算把其它位都置成0, 变成只比较1的这一位.

 

posted @ 2012-05-10 13:08 Aleax 阅读(10) 评论(0) 编辑
class Program
    {
        private delegate void deleFunc(string str);
        static void Main(string[] args)
        {
            deleFunc func = new Program().Chinese;
            //func("张三");
            func += English;
            func("alex");

            Console.WriteLine( "==================");

            //匿名委托
            deleFunc func1 = delegate(string name)
                                 {
                                     Console.WriteLine("你好,{0}", name);
                                 };
            func1("李四");

            Console.WriteLine("==================");

            //lambda
            deleFunc func2 = (name => { Console.WriteLine("Hello, {0}", name); });
            func2("Jack");

            //action
            Console.WriteLine("==================");
            Action<string> acFun = (m => { Console.WriteLine("您好,{0}", m); });
            acFun("中国人");

            Func<stringstring> funcDelegate = (m => { return string.Format("Hello,{0}", m); });
            string result = funcDelegate("chinese man");
            Console.WriteLine(result);
           

            //实例应用

            int[] i = { 184515681266 };


            Func<intbool> foo = temp_i => temp_i > 10;
            var list = i.Where(foo);
            foreach (int i1 in list)
            {
                Console.WriteLine(i1);
            }
            Console.WriteLine("==================");

            i.Where(m => m > 15).ToList().ForEach(
                s => { Console.WriteLine(s); }
                );


            Console.Read();

        }

        private void Chinese(string name)
        {
            Console.WriteLine("你好:{0}",name);
        }

        private static void English(string name)
        {
            Console.WriteLine("Hello, {0}",name);
        }
    }
posted @ 2012-02-29 11:05 Aleax 阅读(7) 评论(0) 编辑

 

一、全局变量的出现:

       1. 在任何函数外定义的变量;不能进行 delete 操作;

       2. 没定义就使用,可以进行delete删除。

相关引用:

http://www.cnblogs.com/TomXu/archive/2011/12/28/2286877.html

 

 实例:

      if (!("a" in window)) {
        var a = 1;// Javascript 会自动将var 放在前面(赋值不会提前),所以这的if为false.
        alert('test');
    }
    alert(a);
    // 等于下面这个JS
    var a;
    if (!("a" in window)) {
        a = 1;
    }
    alert(a);
//=====方法中有重名的情况=========
myname = "global"; // 全局变量
function func() {
    alert(myname); // "undefined", 如果加上this.myname,则会 弹出global
    var myname = "local";
    alert(myname); // "local"
}
func();
//myname被当做了函数的局部变量(尽管是之后声明的),所有的变量声明当被悬置到函数的顶部了
//
与下面的JS相同
myname = "global"; // global variable
function func() {
   var myname; // 等同于 -> var myname = undefined;
   alert(myname); // "undefined"
   myname = "local";
   alert(myname); // "local"}
func();

 

 

 

function add(x,y,z){
        //首先检查传递的参数数量是否正确
        if(arguments.length != 3){
            throw new Error("function f called with " + arguments.length + "arguments ,but it not 3 arguments.");
        }
        //下面运行真正的函数
        arguments[1]=8;//修改值后也会影响到之后的计算
        return x+y+z;
    }

 

 

posted @ 2012-02-16 11:06 Aleax 阅读(16) 评论(0) 编辑
public class MyClass
    {
        public int Value;
    }

    //MSDN: http://msdn.microsoft.com/zh-cn/library/s6938f28%28v=vs.80%29.aspx
    
//引用类型的变量不直接包含其数据;它包含的是对其数据的引用。当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值。
    
//但是无法更改引用本身的值;也就是说,不能使用相同的引用为新类分配内存并使之在块外保持。
    
//若要这样做,应使用 ref 或 out 关键字传递参数。

    
// 引用类型参数没有加ref 试图将参数重新分配到不同的内存位置时,该操作仅在方法内有效,并不影响原始变量
    class Program
    {
        static void Main(string[] args)
        {
            MyClass m = new MyClass();
            m.Value = 1;

            Console.WriteLine(m.Value);//Step 1-->1
            Test1(m);
            Console.WriteLine(m.Value);//Step 3 --> 50

            Test2(ref m);
            Console.WriteLine(m.Value); //Step 5 -->100
            Console.ReadLine();
        }

        public static void Test1(MyClass m)
        {
            m.Value = 50;
            m = new MyClass();
            m.Value = 200;
            Console.WriteLine("Func: Test1, m Value = {0}", m.Value);// Step 2 --> 200
        }

        public static void Test2(ref MyClass m)
        {
            m.Value = 60;
            m = new MyClass();
            m.Value = 100;
            Console.WriteLine("Func: Test2, m Value = {0}", m.Value);//Step 4 -->100
        }
    }
posted @ 2011-10-13 11:38 Aleax 阅读(29) 评论(1) 编辑
摘要: Winform下的HTMLEditor引用Microsoft.mshtml的注意事项阅读全文
posted @ 2011-08-31 16:25 Aleax 阅读(258) 评论(0) 编辑
摘要: 记下,以备后查.staticvoidTestThread4(){//1.直接写方法Threadt1=newThread(PrintMessage);t1.Start("TestThread1");//2.使用ParameterizedthreadStartThreadt2=newThread(newParameterizedThreadStart(PrintMessage));t2.Start("TestThread2");//3.使用LambdaThreadt3=newThread(()=>Print("TestThread3"阅读全文
posted @ 2011-03-31 17:46 Aleax 阅读(274) 评论(0) 编辑
摘要: 记录 List<T>功能中的Sort和Find功能的几种实现方式Person类 publicclassPerson:IComparable<Person>{publicstringName{get;set;}publicintAge{get;set;}publicPerson(stringname,intage){this.Name=name;this.Age=age;}publicintCompareTo(Personp){returnthis.Age-p.Age;}publicstaticintNameCompareTo(Personp1,Personp2){ret阅读全文
posted @ 2011-03-31 17:26 Aleax 阅读(275) 评论(0) 编辑
摘要: 1.创建表结构和数据 创建表和数据CreateTableProduct--产品表(ProductIDIntIdentity(1,1)Primarykey,--产品IDProductNameNVarchar(100)NotNull,--产品名称ProductPriceIntNotNull--价格)GOCreateTableProductOrder--产品订单(OrderIDIntIdentity(1000,1)Primarykey,ProductIDInt,QuantityInt,--数量amountInt,--金额OrderDateTimeDateTimeNotNull--下单时间)Alter阅读全文
posted @ 2011-03-11 11:17 Aleax 阅读(126) 评论(0) 编辑
摘要: 1.用JS中的this来模拟C#中的实体类, 将实体整体传出到相应方法中进行操作.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><title></title><scripttype="t阅读全文
posted @ 2011-03-04 11:37 Aleax 阅读(102) 评论(0) 编辑

公告