【PK贴】大家晒下C#开发代码的小技巧啊!
推荐区看到《大家晒下java开发代码的小技巧啊!》
突发奇想,搞个C#版的和它PK下。
抛砖引玉:
1. 使用as,而非is
object o = GetFromCache("A_KEY");EmployeeInfo employee = o as EmployeeInfo;if(employee != null) { // TODO: 代码}
using(SqlDataReader reader = SqlHelper.ExecuteReader(cmd)) { while(reader.read()) { // TODO: 读取当前行的数据 }}
using(SqlDataReader reader = SqlHelper.ExecuteReader(cmd)) { Ilist<EmployeeInfo> list = new List<EmployeeInfo>(); while(reader.read()) { list.add(new EmployeeInfo( reader.getInt32(0) // 其它字段 )); }}
string s = "str1" + "str2" + "str3" + "str4"; // 这段代码不需要使用StringBuilder,因为编译后的代码为 string s = "str1str2str3str4";
public static class ControlExtensions { public static void SendTabKey(this Control control, Keys key) { if (key == Keys.Enter) SendKeys.Send("{TAB}"); } }
[解决办法]
占座
[解决办法]
遍歷control
private void PanelClear(Control c) { foreach (Control cc in c.Controls) { if (cc.GetType() != typeof(Panel)) { PanelClear(cc); } else { ((Panel)cc).Visible = false; } } }
[解决办法]
1)对所有类都重写ToString()方法,这样在调试,绑定中都非常有用。
2)使用Enum代替奇迹数
先说两点。想起来再加。
[解决办法]
找出是否存在某個窗體FORM
for (int j = 0; j < Application.OpenForms.Count; j++) { if (Application.OpenForms[j].Name.Equals("FNO31000")) { fno3100 = true; } }If (fno3100 = true)FNO31000 fno = (FNO31000)Application.OpenForms["FNO31000"]
[解决办法]
插队
[解决办法]
lz写的第4点,用String.Format() 如何?
String.Format("{0}{1}{2}{3}", str0, str1, str2, str3);
[解决办法]
留个名,学习
[解决办法]
將datagridview的某個checkbox不顯示
public void chang_COLOR(int i, string str)//將顯示為N者不顯示選取方塊 { dataGridView1.Rows[i].Cells[str].ReadOnly = true; DataGridViewCell cell = new DataGridViewTextBoxCell(); cell.Style.BackColor = Color.Wheat; //cell.ReadOnly = true; cell.Value = "N"; cell.Style.BackColor = Color.White; dataGridView1.Rows[i].Cells[str] = cell; dataGridView1.Rows[i].Cells[str].Style.ForeColor = Color.White; dataGridView1.Rows[i].Cells[str].Style.SelectionBackColor = Color.White; dataGridView1.Rows[i].Cells[str].Style.SelectionForeColor = Color.White; }
[解决办法]
打開某個路徑下的程序
Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; //设定程序名 p.StartInfo.UseShellExecute = false; //关 ?Shell的使用 p.StartInfo.RedirectStandardInput = true; //重定向标 ã输 ¤J p.StartInfo.RedirectStandardOutput = true; //重定向标 ã输 ¥X p.StartInfo.RedirectStandardError = true; //重定向错 ?输 ¥X p.StartInfo.CreateNoWindow = true; //设置不显 ¥Ü窗口 p.StartInfo.WorkingDirectory = @"E:\"; p.Start(); //启 ? p.StandardInput.WriteLine("新增文字文件.bat"); p.StandardInput.WriteLine("exit");
[解决办法]
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { public delegate bool DelegateTest(object obj1, object obj2); class Class1 { static void Main() { Employee[] Employees = { new Employee("huguo",1000000), new Employee("lili",20000), new Employee("lulu",30000), new Employee("xixi",50000), new Employee("jianjian",10000), new Employee("yoyo",9000) }; //委托DelegateTest代理的方法是Greate DelegateTest MyTest = new DelegateTest(Employee.Greate); Sorter MySort = new Sorter(); //冒泡算法中第一个参数是对应Employees数组信息,第二个参数是委托 MySort.Sort(Employees, MyTest); for (int m = 0; m < Employees.Length; m++) { Console.WriteLine(Employees[m].ToString()); } } } class Employee { public string Name; public int Salary; public Employee(string Name, int Salary) { this.Name = Name; this.Salary = Salary; } //用override重写string方法 public override string ToString() { return string.Format(Name + ",{0:C},", Salary); } //定义一个方法,如果obj2传过来的 Salary大于obj1就返回true; public static bool Greate(object obj1, object obj2) { Employee Employee1 = (Employee)obj1; Employee Employee2 = (Employee)obj2; return (Employee2.Salary > Employee1.Salary) ? true : false; } } class Sorter { public void Sort(object[] ArrayObj, DelegateTest Test) { //下面就是冒泡算法啦 for (int i = 0; i < ArrayObj.Length; i++) { for (int j = i + 1; j < ArrayObj.Length; j++) { if (Test(ArrayObj[j], ArrayObj[i])) { object Temp = ArrayObj[i]; ArrayObj[i] = ArrayObj[j]; ArrayObj[j] = Temp; } } } } } } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/07/25/4380283.aspx
[解决办法]
protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) { CreateNum(); } } //在从1到20间随机生成6个互不相同的整数。 public void CreateNum() { ArrayList MyArray = new ArrayList(); Random random = new Random(); string str = null; //循环的次数 int Nums = 6; while (Nums > 0) { int i = random.Next(1, 9); if (!MyArray.Contains(i)) { if (MyArray.Count < 6) { MyArray.Add(i); } } Nums -= 1; } for (int j = 0; j <= MyArray.Count - 1; j++) { str += MyArray[j].ToString(); } Response.Write(str); } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/05/09/4164277.aspx
[解决办法]
//方法1 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ReplaceStr(); } } public void ReplaceStr() { ArrayList MyArray = new ArrayList(); MyArray.Add("123"); MyArray.Add("aaa"); if (MyArray.Contains("aaa")) { MyArray.Remove("aaa"); MyArray.Add("bbb"); } for (int i = 0; i <= MyArray.Count - 1; i++) { Response.Write(MyArray[i].ToString()); } } //方法2 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ReplaceStr(); } } public void ReplaceStr() { string [] tm = new string[] { "123", "aaa" }; for (int i = 0; i < tm.Length; i++) { if (tm[i].ToString() == "aaa") { tm[i]=tm[i].Replace("aaa", "bbb"); } } for (int i = 0; i <= tm.Length - 1; i++) { Response.Write(tm[i].ToString()); } } //方法3 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string[] tm = new string[] { "123", "aaa" }; string Array=ReplaceValue(tm, "aaa", "bbb", ","); Response.Write(Array); } } public static string ReplaceValue(string[] item, string oldSv, string newSv, string separator) { if (item == null) return string.Empty; StringBuilder sb = new StringBuilder(); foreach (string s in item) { if (s == oldSv) { sb.Append(newSv); sb.Append(separator); } else { sb.Append(s); sb.Append(separator); } } string returnstr = sb.ToString(); returnstr = (returnstr.EndsWith(separator)) ? returnstr.Substring(0, returnstr.Length - 1) : returnstr; return returnstr; } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/05/10/4164995.aspx
[解决办法]
[解决办法]
学习了,先
[解决办法]
private static void PrepareCommand(MySqlConnection con,MySqlCommand mycmd,string cmdText,MySqlParameter[] cmdParams,CommandType cmdType) { con.Open(); mycmd.Connection = con; mycmd.CommandText = cmdText; mycmd.CommandType = cmdType; if (cmdParams != null) { foreach (MySqlParameter param in cmdParams) { //if((param.Direction==ParameterDirection.InputOutput || param.Direction==ParameterDirection.Input) && (param.Value==null)) //{ // param.Value = DBNull.Value; mycmd.Parameters.Add(param); //} } } }
[解决办法]
强贴留名。
[解决办法]
这算小技巧吧。
------解决方案--------------------
如果实现了IDisposable的对象在访问完成后要进行关闭,则在try{...}finally{...//关闭代码},或直接调用using(...){...}。
[解决办法]
为什么用SqlDataReader而不用DataSet?
SqlDataReader持久占连接。
而且DataSet对VS控件的兼容性更强一些。
[解决办法]
学啊 不学怎么进步
[解决办法]
楼主说的不是Effective C# 上的
[解决办法]
在写公共类库,使用catch时,最好不要catch(Exception e){throw e;}而使用catch{throw;},同时如果使用catch捕捉异常,最好使用catch(最具体的Exception e){...}catch(最具体的Exception e){...}...一直到所有确认的错误都能检查到 ;而不要使用catch(基类Exception e){...}
[解决办法]
学习
[解决办法]
//尽量不用string str="";//而是string str=string.Empty;
[解决办法]
看不太懂。。。 插队插队
[解决办法]
[解决办法]
惭愧 只有学习的份
[解决办法]
向樓上諸位前輩高人學習,再學習!!
[解决办法]
顶。顺便赚分
[解决办法]
此贴必火
[解决办法]
.
[解决办法]
PK JAVA 板??
[解决办法]
好贴,占个位,学习
[解决办法]
为了学习占个位子
[解决办法]
留以致学。
[解决办法]
模拟延时代码:
System.Threading.Thread.Sleep(2000);
[解决办法]
学习
[解决办法]
mark
[解决办法]
好,我是初学者,来观摩学习的
[解决办法]
ToString() 括号中的参数.
[解决办法]
换行字符串,相当于"\r\n",Environment.NewLine
contains代替indexof
字符串组合使用StringBuilder,减少字符串拷贝
使用接口来编程
使用属性代替原始数据
[解决办法]
先通过System.Diagnostics.Process类获取想要编辑的进程 调用API [Flags] public enum ProcessAccessType { PROCESS_TERMINATE = (0x0001), PROCESS_CREATE_THREAD = (0x0002), PROCESS_SET_SESSIONID = (0x0004), PROCESS_VM_OPERATION = (0x0008), PROCESS_VM_READ = (0x0010), PROCESS_VM_WRITE = (0x0020), PROCESS_DUP_HANDLE = (0x0040), PROCESS_CREATE_PROCESS = (0x0080), PROCESS_SET_QUOTA = (0x0100), PROCESS_SET_INFORMATION = (0x0200), PROCESS_QUERY_INFORMATION = (0x0400) } [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId); [DllImport("kernel32.dll")] public static extern Int32 CloseHandle(IntPtr hObject); [DllImport("kernel32.dll")] public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead); [DllImport("kernel32.dll")] public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesWritten); 打开进程private IntPtr m_hProcess = IntPtr.Zero; //这个保存打开了个进程句柄 public void OpenProcess() { // m_hProcess = ProcessMemoryReaderApi.OpenProcess(ProcessMemoryReaderApi.PROCESS_VM_READ, 1, (uint)m_ReadProcess.Id); ProcessMemoryReaderApi.ProcessAccessType access; access = ProcessMemoryReaderApi.ProcessAccessType.PROCESS_VM_READ | ProcessMemoryReaderApi.ProcessAccessType.PROCESS_VM_WRITE | ProcessMemoryReaderApi.ProcessAccessType.PROCESS_VM_OPERATION; m_hProcess = ProcessMemoryReaderApi.OpenProcess((uint)access, 1, (uint)m_ReadProcess.Id); }m_ReadProcess.Id 进程的ID编号 读取 public byte[] ReadProcessMemory(IntPtr MemoryAddress, uint bytesToRead, out int bytesRead) { byte[] buffer = new byte[bytesToRead]; IntPtr ptrBytesRead; ProcessMemoryReaderApi.ReadProcessMemory(m_hProcess, MemoryAddress, buffer, bytesToRead, out ptrBytesRead); bytesRead = ptrBytesRead.ToInt32(); return buffer; }IntPrt MemoryAddress 为要读取的内存地址uint bytesToRead 需要读的数量out int bytesRead 实际读出的数量 写入 public void WriteProcessMemory(IntPtr MemoryAddress, byte[] bytesToWrite, out int bytesWritten) { IntPtr ptrBytesWritten; ProcessMemoryReaderApi.WriteProcessMemory(m_hProcess, MemoryAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten); bytesWritten = ptrBytesWritten.ToInt32(); }IntPrt MemoryAddress 为要读取的内存地址byte[] bytesToWrite 需要写入的数据out int bytesWritten 实际写入多少
[解决办法]
收藏了。。。
[解决办法]
SqlDataReader效率高是肯定的,不过它是独占连接的,当你需要对记录集长时间操作的时候,会影响到其它使用这个连接的代码,用DataSet就不会了吧
[解决办法]
小弟有个问题想找前辈赐教:
现在我做了图片移动的程序,时间触发每五分中遍历一次文件目录,但是现在有个问题,但文件目录图片很多的时候,五分钟没法遍历完文件目录,这样就会造成程序没法工作了。请问各位高人,这种问题大家是如何解决?可否之间迷津,谢谢!小段代码如下:
public void CopyDir(string srcPath, string aimPath)
{
try
{
// 检查目标目录是否以目录分割字符结束如果不是则添加之
if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)
aimPath += Path.DirectorySeparatorChar;
// 判断目标目录是否存在如果不存在则新建之
if (!Directory.Exists(aimPath)) Directory.CreateDirectory(aimPath);
// 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
// 如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法
//string[] fileList = Directory.GetFiles(srcPath,"*.BMP");
string[] fileList = Directory.GetFileSystemEntries(srcPath);
// 遍历所有的文件和目录
foreach (string file in fileList)
{
// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
if (Directory.Exists(file))
{
DirectoryInfo di = new DirectoryInfo(file);
if (di.Name.Substring(di.Name.LastIndexOf(" D") + 1) == "DATA FILE" || di.Name.Substring(di.Name.LastIndexOf("t") + 1) == " images" ||di.Name.Substring(di.Name.LastIndexOf("t") + 1) == " image")
CopyDir(file, aimPath + Path.GetFileName(file));
//System.Threading.Thread.Sleep(500);
//DeleteOriDir(srcPath + Path.GetFileName(file));
cpend = "goings";
}
// 否则直接Copy文件
else
{
FileInfo fi = new FileInfo(file);
TimeSpan span = DateTime.Now.Subtract(fi.CreationTime);
//MessageBox.Show(fi.Extension );
if (span.TotalMinutes > 5 && fi.Extension == ".BMP" && fi.Name.Substring(0, 3) != "000")
{
Bitmap myBitmap = new Bitmap(file);
//生成80*100的缩略图
//Image myThumbnail = myBitmap.GetThumbnailImage(1280,1024,null,IntPtr.Zero);
myBitmap.Save(aimPath + Path.GetFileName(file), System.Drawing.Imaging.ImageFormat.Jpeg);
myBitmap.Dispose();
//myThumbnail.Save(aimPath + Path.GetFileName(file));
//File.Move(file, aimPath + Path.GetFileName(file));
//File.Copy(file, aimPath + Path.GetFileName(file),true);
//删除图片文件
File.Delete(srcPath + Path.GetFileName(file));
cpend = "goings";
}
//
//MessageBox.Show(fi.Name);
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
//cpend = "completed";
}
[解决办法]
学无止境啊 接分啊
[解决办法]
回帖是一种美德
[解决办法]
很好
又学习了
[解决办法]
.ddd
[解决办法]
这个贴子很好,希望技术专家多发些技术性的文章。真正做到你为我服务,我为你服务!谢谢!
[解决办法]
/// <summary> /// override 系统的Equals函数 /// </summary> /// <param name="obj"></param> /// <returns>返回是否相等</returns> public override Boolean Equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (GetType() != obj.GetType()) return false; aprResult other = (aprResult)obj; if (this.numA == other.numA && this.numB == other.numB) return true; return false; } /// <summary> /// 重载系统的GetHashCode函数 /// </summary> /// <returns>返回hashcode</returns> public override int GetHashCode() { int PRIME = 31; int result = 1; result = PRIME * result + ((numA == 0) ? 0 : numA.GetHashCode()); return result; }
[解决办法]
好难懂~~~~~~~
[解决办法]
不行
我得来学习一下才行
[解决办法]
学无止境
[解决办法]
mark
[解决办法]
这种集思广益的帖子,一个字,好
[解决办法]
学习哦 ~
[解决办法]