c# 基本 用法

It really depends on what you're going for:

  • #if DEBUG: The code in here won't even reach the IL on release.
  • [Conditional("DEBUG")]: This code will reach the IL, however calls to the method will be omitted unless DEBUG is set when the caller is compiled.

Personally I use both depending on the situation:

Conditional("DEBUG") Example: I use this so that I don't have to go back and edit my code later during release, but during debugging I want to be sure I didn't make any typos. This function checks that I type a property name correctly when trying to use it in my INotifyPropertyChanged stuff.

[Conditional("DEBUG")]
[DebuggerStepThrough]
protected void VerifyPropertyName(String propertyName)
{
    if (TypeDescriptor.GetProperties(this)[propertyName] == null)
        Debug.Fail(String.Format("Invalid property name. Type: {0}, Name: {1}",
            GetType(), propertyName));
}

You really don't want to create a function using #if DEBUG unless you are willing to wrap every call to that function with the same #if DEBUG:

#if DEBUG
    public void DoSomething() { }
#endif

    public void Foo()
    {
#if DEBUG
        DoSomething(); //This works, but looks FUGLY
#endif
    }

versus:

[Conditional("DEBUG")]
public void DoSomething() { }

public void Foo()
{
    DoSomething(); //Code compiles and is cleaner, DoSomething always
                   //exists, however this is only called during DEBUG.
}

#if DEBUG example: I use this when trying to setup different bindings for WCF communication.

#if DEBUG
        public const String ENDPOINT = "Localhost";
#else
        public const String ENDPOINT = "BasicHttpBinding";
#endif

In the first example, the code all exists, but is just ignored unless DEBUG is on. In the second example, the const ENDPOINT is set to "Localhost" or "BasicHttpBinding" depending on if DEBUG is set or not.


Update: Because this answer is the highest voted answer to the question, I am updating this answer to clarify an important and tricky point. If you choose to use the ConditionalAttribute, keep in mind that calls are omitted during compilation, and not runtime. That is:

MyLibrary.dll

[Conditional("DEBUG")]
public void A()
{
    Console.WriteLine("A");
    B();
}

[Conditional("DEBUG")]
public void B()
{
    Console.WriteLine("B");
}

When the library is compiled against release mode (i.e. no DEBUG symbol), it will forever have the call to B() from within A() omitted, even if a call to A() is included because DEBUG is defined in the calling assembly.

First  and FirstOrDefault 


x |= y 等效于  x = x | y  

不同的是 x 只计算一次。 | 运算符对整型操作数执行按位逻辑“或”运算,对布尔操作数执行逻辑“或”运算。

不能直接重载 |= 运算符,但用户定义的类型可以重载 | 运算符






int a;int b a.CompareTo(b);如果a大于等于b 返回>=0,反之小于0





String.PadLeft 方法

返回一个新字符串,该字符串通过在此实例中的字符左侧填充空格来达到指定的总长度,从而实现右对齐。

//C#构造函数 初始化器的使用


打印的顺序是:
 A(): 2
A(int a): 8
A(int a, int b): 12

//复制出来一部分数据



public enum SkillType
        {
            JumpAttack = 0,
            FocoAttack,
            SwipeAttack,
            Skill1,
            Appear,
            SkillBegin = Skill1,
            Skill2,
            Skill3,
            Skill4,
            Skill5
        }


skill 1 和 skillBegin 都是3 Appear 是4 skill4 是6

public enum SkillType
        {
            JumpAttack = 0,
            FocoAttack,
            SwipeAttack,
            Skill1,
            SkillBegin = Skill1,
            Appear,
            Skill2,
            Skill3,
            Skill4,
            Skill5
        }


skill 1 和 skillBegin 都是3 Appear 是4 skill4 是7



(1)、C#语法中一个个问号(?)的运算符是指可以为 null 的类型。

 MSDN上面的解释:

在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型布尔型以及日期类型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义。

 

 (2)、C#语法中两个问号(??)的运算符是指null 合并运算符,合并运算符为类型转换定义了一个预设值,以防可空类型的值为Null。

MSDN上面的解释:

?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数(左边表达式);否则当左操作数为 null,返回右操作数(右边表达式)。 


C# Code:

int? x = null;//定义可空类型变量
int? y = x ?? 1000;//使用合并运算符,当变量x为null时,预设赋值1000

Console.WriteLine(y.ToString()); //1000

 

        /// <summary>
        /// Gets a single instance
        /// </summary>
        public static Log LogInstance
        {
              get

              {

                   return _log ?? (_log = new Log()); //如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
               }
        }




 1 #region
Enumberable First() or FirstOrDefault()
 2         /// <summary>
 3         /// 返回序列中的第一个元素;如果序列中不包含任何元素,则返回默认值。 
 4         /// 如果 source 为空,则返回 default(TSource);否则返回 source 中的第一个元素。
 5         /// ArgumentNullException      sourcevalue 为 null。
 6         /// </summary>
 7         public static void FunFirstOrDefault()
 8         {
 9             //FirstOrDefault()
10             string[] names = { "Haiming QI", "Har", "Adams, Terry", "Andersen, Henriette Thaulow", "Hedlund, Magnus", "Ito, Shu", null };
11             // string[] names = { }; // string 类型的默认值是空
12 
13             int[] sexs = { 100, 229, 44, 3, 2, 1 };
14             // int[] sexs = { };  // 因为int 类型的默认值是0. 所以当int[] 数组中没有任何元素时。default value is 0; 如果有元素,则返回第一个元素
15 
16             //原方法: public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source);   // 扩展了IEnumerable<TSource>  接口
17             //string namevalue = names.FirstOrDefault();  // string IEnumerable<string>.FirstOrDefault<string>();
18             int sexvalue = sexs.FirstOrDefault(); // int IEnumerable<int>.FirstOrDefault<string>();
19             //string namevalue = names.DefaultIfEmpty("QI").First();
20             string namevalue = names.FirstOrDefault();
21             Console.WriteLine("FirstOrDefault(): default(TSource) if source is empty; otherwise, the first element in source:{0}", namevalue);
22 
23 
24         }
25 
26         /// <summary>
27         /// 返回序列中的第一个元素。 
28         /// 如果 source 中不包含任何元素,则 First<TSource>(IEnumerable<TSource>) 方法将引发异常
29         /// ArgumentNullException      sourcevalue 为 null。
30         //  InvalidOperationException  源序列为空。
31         /// </summary>
32         public static void FunFirst()
33         {
34             //First()
35             string[] names = { "Haiming QI", "Har", "Adams, Terry", "Andersen, Henriette Thaulow", "Hedlund, Magnus", "Ito, Shu", null };
36             // string[] names = { };
37 
38             int[] sexs = { 100, 229, 44, 3, 2, 1 };
39             //int[] sexs = { };
40             int fsex = sexs.First();
41             string fname = names.First(); // 如果序列中没有元素则会发生,InvalidOperationException 异常。 源序列为空。
42 
43             Console.WriteLine("First(): Returns the first element of a sequence : {0}", fname);
44 
45         }
46         #endregion
复制代码

以上是我在本地验证的code.

需要注意的是:

 

这都是扩展了IEnumerable 这个接口。

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source);

First 和 FirstOrDefault 最大的区别在于。 当集合(这个集合可以是:Arry,List,等等)中没有元素的时候。 First 会报异常 InvalidOperationException 源序列为空。
而 FirstOrDefault 则不会。


c#计时方法

  1. //秒表方法一:  
  2.        Stopwatch sw = new Stopwatch();  
  3.        sw.Start();  
  4.        for (int i = 0; i < 10000; i++)  
  5.        {  
  6.   
  7.        }  
  8.        sw.Stop();  
  9.        MessageBox.Show(sw.Elapsed.TotalMilliseconds.ToString());  
  10.   
  11.        //当前时间减去开始时间方法二:  
  12.        DateTime begintime = DateTime.Now;  
  13.        for (int i = 0; i < 10000; i++)  
  14.        {  
  15.   
  16.        }  
  17.        TimeSpan ts = DateTime.Now.Subtract(begintime);  
  18.        MessageBox.Show(ts.TotalMilliseconds.ToString());  
一般md5加密,分为字符串加密和文件加密两种。这里说的加密只是一种不严谨的说法,实际并非加密,只是一种散列算法,其不可逆,即拿到一个md5值不能反向得到源字符串或源文件内容,

#region 1.获得md5值


        public static string GetMD5(string msg)
        {
            StringBuilder sb = new StringBuilder();


            using (MD5 md5=MD5.Create())
            {
                byte[] buffer = Encoding.UTF8.GetBytes(msg);
                byte[] newB = md5.ComputeHash(buffer);


                foreach (byte item in newB)
                {
                    sb.Append(item.ToString("x2"));
                }
            }


            return sb.ToString();
        }


        #endregion

#region 2获得一个文件的MD5


        public static string GetFileMD5(string filepath)
        {
            StringBuilder sb = new StringBuilder();
            using (MD5 md5=MD5.Create())
            {
                using (FileStream fs=File.OpenRead(filepath))
                {
                    byte[] newB = md5.ComputeHash(fs);
                    foreach (byte item in newB)
                    {
                        sb.Append(item.ToString("x2"));
                    }
                }
            }


            return sb.ToString();
        }


        #endregion

 C#MD5加密解密

using System.Security.Cryptography;
using    System.IO;  
using    System.Text; 

///MD5加密
  public string MD5Encrypt(string    pToEncrypt,  string    sKey)
    {  
     DESCryptoServiceProvider    des  =  new    DESCryptoServiceProvider();  
   byte[]    inputByteArray  =    Encoding.Default.GetBytes(pToEncrypt);  
     des.Key  =    ASCIIEncoding.ASCII.GetBytes(sKey);  
     des.IV  =    ASCIIEncoding.ASCII.GetBytes(sKey);  
     MemoryStream    ms  =  new    MemoryStream();  
     CryptoStream    cs  =  new    CryptoStream(ms,    des.CreateEncryptor(),CryptoStreamMode.Write);  
     cs.Write(inputByteArray,  0,    inputByteArray.Length);  
     cs.FlushFinalBlock();  
     StringBuilder    ret  =  new    StringBuilder();  
   foreach(byte    b  in    ms.ToArray())  
     {  
      ret.AppendFormat("{0:X2}",    b);  
     }  
     ret.ToString();  
   return    ret.ToString();  


    }

  ///MD5解密
  public string MD5Decrypt(string    pToDecrypt,  string    sKey)
    { 
     DESCryptoServiceProvider    des  =  new    DESCryptoServiceProvider();  

   byte[]    inputByteArray  =  new  byte[pToDecrypt.Length  /  2];  
   for(int    x  =  0;    x  <    pToDecrypt.Length  /  2;    x++)  
     {  
    int    i  =    (Convert.ToInt32(pToDecrypt.Substring(x  *  2,  2),  16));  
      inputByteArray[x]  =    (byte)i;  
     }  

     des.Key  =    ASCIIEncoding.ASCII.GetBytes(sKey);  
     des.IV  =    ASCIIEncoding.ASCII.GetBytes(sKey);  
     MemoryStream    ms  =  new    MemoryStream();  
     CryptoStream    cs  =  new    CryptoStream(ms,    des.CreateDecryptor(),CryptoStreamMode.Write);  
     cs.Write(inputByteArray,  0,    inputByteArray.Length);  
     cs.FlushFinalBlock();  

     StringBuilder    ret  =  new    StringBuilder();  
             
   return    System.Text.Encoding.Default.GetString(ms.ToArray());  
    }

-------------------------------------------------------------------------------

using System;
using System.Text;
using System.Globalization;
using System.Security.Cryptography;
class DES
{
// 创建Key
public string GenerateKey()
{
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
// 加密字符串
public string EncryptString(string sInputString, string sKey)
{
byte [] data = Encoding.UTF8.GetBytes(sInputString);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
byte [] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return BitConverter.ToString(result);
}
// 解密字符串
public string DecryptString(string sInputString, string sKey)
{
string [] sInput = sInputString.Split("-".ToCharArray());
byte [] data = new byte[sInput.Length];
for(int i = 0; i < sInput.Length; i++)
{
data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
}
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateDecryptor();
byte [] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return Encoding.UTF8.GetString(result);
}
}
class Test
{
static void Main()
{
DES des = new DES();
string key = des.GenerateKey();
string s0 = "中国软件 - csdn.net";
string s1 = des.EncryptString(s0, key);
string s2 = des.DecryptString(s1, key);
Console.WriteLine("原串: [{0}]", s0);
Console.WriteLine("加密: [{0}]", s1);
Console.WriteLine("解密: [{0}]", s2);
}
}
/* 程序输出:
原串: [中国软件 - csdn.net]
加密: [E8-30-D0-F2-2F-66-52-14-45-9A-DC-C5-85-E7-62-9B-AD-B7-82-CF-A8-0A-59-77]
解密: [中国软件 - csdn.net]
*/


从网页上提取用户邮箱为每个邮箱发送一封邮件


WebClient wc = new WebClient();
            string html = wc.DownloadString("http://laiba.tianya.cn/tribe/showArticle.jsp?groupId=93803&articleId=255105449041749990113803&curPageNo=1&h=p_1255011420000");
            string reg = "[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_\\.]+\\.[a-zA-Z0-9_\\.]+";
            MatchCollection matches = Regex.Matches(html, reg);


            List<string> listEmail = new List<string>();
            foreach (Match mt in matches)
            {
                listEmail.Add(mt.Groups[0].Value);
            }


            //------------------以下是创建邮件和发送邮件的过程----------------------
            try
            {
                MailMessage mail = new MailMessage();
                mail.From = new MailAddress("****@qq.com");
                mail.To.Add("*****@qq.com");
                foreach (string email in listEmail)
                {
                    mail.To.Add(email);
                }                
                mail.SubjectEncoding = Encoding.UTF8;
                mail.Subject = "测试邮件";
                mail.BodyEncoding = Encoding.UTF8;
                mail.Body = "c#程序控制控!!!!!!!";


                //创建html的邮件内容
                AlternateView view = AlternateView.CreateAlternateViewFromString("文字在这里,也可以是<h1>html</h1>的代码<img src=\"cid:img001\" />", Encoding.UTF8, "text/html");
                LinkedResource lr = new LinkedResource(@"E:\图片\pics\雷锋.jpg");
                lr.ContentId = "img001";


                view.LinkedResources.Add(lr);
                mail.AlternateViews.Add(view);


                //为邮件添加附件
                Attachment at = new Attachment(@"D:\项目\chinatt315\members\qiyetupian\batianshengtai01.jpg");
                Attachment at1 = new Attachment(@"D:\项目\chinatt315\2011315hd\qytp\piyopiyo2.jpg");
                mail.Attachments.Add(at);
                mail.Attachments.Add(at1);




                SmtpClient smtp = new SmtpClient("pop.qq.com");
                smtp.Credentials = new NetworkCredential("用户名", "密码$");
                
                //为每个邮箱发送2封相同的邮件
                for (int i = 0; i < 2; i++)
                {
                    smtp.Send(mail);
                }                
                Console.WriteLine("发送成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine("发送失败!"+ex.Message);
            }


            Console.ReadKey();

阅读更多
个人分类: C#Language
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

c# 基本 用法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭