Search
Latest topics
Một vài điều cần lưu ý trong lập trình C#
Page 1 of 1
Một vài điều cần lưu ý trong lập trình C#
1.Sử dụng String.Format
Thông thường ta hay khai báo 1 biến kiểu chuỗi như sau
string query = "UPDATE User SET Name='" + name + "' WHERE Id=" + id;
Đoạn code trên nhìn khá là rắc rối,nếu để ý thì nó sẽ tạo ra 3 bản chuỗi điều này thực sự không cần thiết trong ứng dụng của bạn.
Cách làm tốt hơn là bạn nên sử dụng String.Format,nó làm cho đoạn code của bạn trông sáng sủa hơn
string query = string.Format("UPDATE User SET Name='{0}' WHERE ID={1}", name, id);
2.Sử dụng quá nhiều khối try-catch
Thông thường trong thân hàm Main ta thường gọi các hàm con , mà trong mỗi hàm con đó ta thường tạo 1 khối try-catch đễ bẫy lỗi.Bạn tham khảo đoạn code mẫu sau
public class NestedExceptionHandling
{
public void MainMethod()
{
try
{
ChildMethod1();
}
catch (Exception exception)
{
//Handle exception
}
}
private void ChildMethod1()
{
try
{
ChildMethod2();
}
catch (Exception exception)
{
//Handle exception
throw;
}
}
private void ChildMethod2()
{
try
{
//some implementation
}
catch (Exception exception)
{
//Handle exception
throw;
}
}
}
Bạn để ý nếu 3 hàm trên chỉ tung ra cùng 1 biệt lệ,mà được xử lý nhiều lần thì chắc chắn sẽ rất tốn chi phí cho ứng dụng của ta.
Và để tránh điều này ta chỉ cần sử dụng 1 khối try-catch ở trong thân hàm Main
public class NestedExceptionHandling
{
public void MainMethod()
{
try
{
ChildMethod1();
}
catch(Exception exception)
{
//Handle exception
}
}
private void ChildMethod1()
{
ChildMethod2();
}
private void ChildMethod2()
{
//some implementation
}
}
3.Không nên sử dụng vòng lặp foreach cho Collections lớn
Thông thường mình hay sử dụng vòng lặp foreach thay cho vòng lặp for,vì foreach dễ sử dụng hơn.
Tuy nhiên khi làm việc với dữ liệu lớn thì for hay foreach cái nào nhanh hơn ?.
Ta xem đoạn code dưới đây kêt hợp với thể hiện Stopwatch để đo thời gian.
static void Main(string[] args)
{
DataTable dt = PopulateData();
Stopwatch watch = new Stopwatch();
//For loop
watch.Start();
for (int count = 0; count < dt.Rows.Count; count++)
{
dt.Rows[count]["Name"] = "Value";
}
watch.Stop();
Console.WriteLine("Time For loop: {0}", watch.Elapsed.TotalSeconds);
//Foreach loop
watch.Start();
foreach (DataRow row in dt.Rows)
{
row["Name"] = "Value";
}
watch.Stop();
Console.WriteLine("Time For Each loop: {0}", watch.Elapsed.TotalSeconds);
Console.ReadKey();
}
Với đoạn code trên khi sử dụng vòng lặp foreach tốn :0.0778163s
Còn vòng lặp for tốn :0.134186s
4.Sử dụng các phương thức có sẵn
Chúng ta thường không để ý đến các phương thức có sẵn.Giả sử khi muốn kiểm tra tính hợp lệ của dữ liệu,thông thường ta sẽ viết 1 hàm để kiếm tra tính hợp lệ của dữ liệu đó.
Đoạn code mẫu dưới đây dùng để kiểm tra xem chuỗi đã cho có phải là số hay không.
public bool CheckIfNumeric(string value)
{
bool isNumeric = true;
try
{
int i = Convert.ToInt32(value);
}
catch(FormatException exception)
{
isNumeric = false;
}
return isNumeric;
}
Chúng ta có cách làm hay hơn là sử dụng phương thức sẵn có TryParse
int output = 0;
bool isNumeric = int.TryParse(value, out output);
Sử dụng TryParse sẽ làm cho đoạn code của bạn chạy nhanh hơn và sáng sủa hơn.
5.Sử dụng khai baó Using
Thông thường khi chúng ta không sử dụng đối tượng thì chúng ta sử dụng phương thức Dispose() để hủy đối tượng đó.
Đoạn code mẫu dưới đây sẻ hủy đối tượng SqlConnection khi ta không cần sủ dụng tới nó
public void MethodUsing()
{
SqlConnection connection = null;
try
{
connection = new SqlConnection("itforfun");
connection.Open();
//Do Something
}
catch (Exception exception)
{
//handle exception
}
finally
{
connection.Close();
connection.Dispose();
}
}
Dưới đây là cách sử dụng Using
public void MethodUsing()
{
using (SqlConnection connection = new SqlConnection("itforfun"))
{
connection.Open();
//Do Something
}
}
Bạn để ý khi sử dụng using thì ta không cần sử dụng khối try-catch dù có biệt lệ xảy ra, cũng không cần sử dụng phương thức Dispose() để giải phóng dữ liệu.
6.Sử dụng tên cột thay cho indexer trong DataTable
Thông thường ta thường sử dụng chỉ số cột khi muốn tương tác với DataTable.
Đoạn code dưới đây sử dụng chỉ số cột để gán dữ liệu :
public class MyClass
{
public void MyMethod()
{
// Gán dữ liệu vào DataTable
DataTable dt = DataAccess.GetData();
foreach (DataRow row in dt.Rows)
{
// Gán dữ liệu thông qua chỉ số cột.
int empId = Convert.ToInt32(row[0]);
}
}
}
Trong đoạn code trên khi bạn thay đổi thứ tự cột trong cơ sở dữ liệu thì đoạn code của bạn sẽ hiển thị không đúng với mong muốn.
Vì thế để khắc phục vấn đề trên bạn nên sử dụng tên cột
public class MyClass
{
private const string COL_EMP_ID = "itforfun";
public void MyMethod()
{
DataTable dt = DataAccess.GetData();
foreach (DataRow row in dt.Rows)
{
int empId = Convert.ToInt32(row[COL_EMP_ID]);
}
}
}
Đoạn code trên sẽ luôn hiển thị đúng theo yêu cầu của bạn dù bạn đã thay đổi thứ tự cột trong cơ sở dữ liệu.
Kết Luận:
Trên đây chỉ là một vài điều cần lưu ý trong lập trình,hi vọng bạn có thể sửa chữa được những sai lầm của mình nhờ bài viết trên.
Thông thường ta hay khai báo 1 biến kiểu chuỗi như sau
string query = "UPDATE User SET Name='" + name + "' WHERE Id=" + id;
Đoạn code trên nhìn khá là rắc rối,nếu để ý thì nó sẽ tạo ra 3 bản chuỗi điều này thực sự không cần thiết trong ứng dụng của bạn.
Cách làm tốt hơn là bạn nên sử dụng String.Format,nó làm cho đoạn code của bạn trông sáng sủa hơn
string query = string.Format("UPDATE User SET Name='{0}' WHERE ID={1}", name, id);
2.Sử dụng quá nhiều khối try-catch
Thông thường trong thân hàm Main ta thường gọi các hàm con , mà trong mỗi hàm con đó ta thường tạo 1 khối try-catch đễ bẫy lỗi.Bạn tham khảo đoạn code mẫu sau
public class NestedExceptionHandling
{
public void MainMethod()
{
try
{
ChildMethod1();
}
catch (Exception exception)
{
//Handle exception
}
}
private void ChildMethod1()
{
try
{
ChildMethod2();
}
catch (Exception exception)
{
//Handle exception
throw;
}
}
private void ChildMethod2()
{
try
{
//some implementation
}
catch (Exception exception)
{
//Handle exception
throw;
}
}
}
Bạn để ý nếu 3 hàm trên chỉ tung ra cùng 1 biệt lệ,mà được xử lý nhiều lần thì chắc chắn sẽ rất tốn chi phí cho ứng dụng của ta.
Và để tránh điều này ta chỉ cần sử dụng 1 khối try-catch ở trong thân hàm Main
public class NestedExceptionHandling
{
public void MainMethod()
{
try
{
ChildMethod1();
}
catch(Exception exception)
{
//Handle exception
}
}
private void ChildMethod1()
{
ChildMethod2();
}
private void ChildMethod2()
{
//some implementation
}
}
3.Không nên sử dụng vòng lặp foreach cho Collections lớn
Thông thường mình hay sử dụng vòng lặp foreach thay cho vòng lặp for,vì foreach dễ sử dụng hơn.
Tuy nhiên khi làm việc với dữ liệu lớn thì for hay foreach cái nào nhanh hơn ?.
Ta xem đoạn code dưới đây kêt hợp với thể hiện Stopwatch để đo thời gian.
static void Main(string[] args)
{
DataTable dt = PopulateData();
Stopwatch watch = new Stopwatch();
//For loop
watch.Start();
for (int count = 0; count < dt.Rows.Count; count++)
{
dt.Rows[count]["Name"] = "Value";
}
watch.Stop();
Console.WriteLine("Time For loop: {0}", watch.Elapsed.TotalSeconds);
//Foreach loop
watch.Start();
foreach (DataRow row in dt.Rows)
{
row["Name"] = "Value";
}
watch.Stop();
Console.WriteLine("Time For Each loop: {0}", watch.Elapsed.TotalSeconds);
Console.ReadKey();
}
Với đoạn code trên khi sử dụng vòng lặp foreach tốn :0.0778163s
Còn vòng lặp for tốn :0.134186s
4.Sử dụng các phương thức có sẵn
Chúng ta thường không để ý đến các phương thức có sẵn.Giả sử khi muốn kiểm tra tính hợp lệ của dữ liệu,thông thường ta sẽ viết 1 hàm để kiếm tra tính hợp lệ của dữ liệu đó.
Đoạn code mẫu dưới đây dùng để kiểm tra xem chuỗi đã cho có phải là số hay không.
public bool CheckIfNumeric(string value)
{
bool isNumeric = true;
try
{
int i = Convert.ToInt32(value);
}
catch(FormatException exception)
{
isNumeric = false;
}
return isNumeric;
}
Chúng ta có cách làm hay hơn là sử dụng phương thức sẵn có TryParse
int output = 0;
bool isNumeric = int.TryParse(value, out output);
Sử dụng TryParse sẽ làm cho đoạn code của bạn chạy nhanh hơn và sáng sủa hơn.
5.Sử dụng khai baó Using
Thông thường khi chúng ta không sử dụng đối tượng thì chúng ta sử dụng phương thức Dispose() để hủy đối tượng đó.
Đoạn code mẫu dưới đây sẻ hủy đối tượng SqlConnection khi ta không cần sủ dụng tới nó
public void MethodUsing()
{
SqlConnection connection = null;
try
{
connection = new SqlConnection("itforfun");
connection.Open();
//Do Something
}
catch (Exception exception)
{
//handle exception
}
finally
{
connection.Close();
connection.Dispose();
}
}
Dưới đây là cách sử dụng Using
public void MethodUsing()
{
using (SqlConnection connection = new SqlConnection("itforfun"))
{
connection.Open();
//Do Something
}
}
Bạn để ý khi sử dụng using thì ta không cần sử dụng khối try-catch dù có biệt lệ xảy ra, cũng không cần sử dụng phương thức Dispose() để giải phóng dữ liệu.
6.Sử dụng tên cột thay cho indexer trong DataTable
Thông thường ta thường sử dụng chỉ số cột khi muốn tương tác với DataTable.
Đoạn code dưới đây sử dụng chỉ số cột để gán dữ liệu :
public class MyClass
{
public void MyMethod()
{
// Gán dữ liệu vào DataTable
DataTable dt = DataAccess.GetData();
foreach (DataRow row in dt.Rows)
{
// Gán dữ liệu thông qua chỉ số cột.
int empId = Convert.ToInt32(row[0]);
}
}
}
Trong đoạn code trên khi bạn thay đổi thứ tự cột trong cơ sở dữ liệu thì đoạn code của bạn sẽ hiển thị không đúng với mong muốn.
Vì thế để khắc phục vấn đề trên bạn nên sử dụng tên cột
public class MyClass
{
private const string COL_EMP_ID = "itforfun";
public void MyMethod()
{
DataTable dt = DataAccess.GetData();
foreach (DataRow row in dt.Rows)
{
int empId = Convert.ToInt32(row[COL_EMP_ID]);
}
}
}
Đoạn code trên sẽ luôn hiển thị đúng theo yêu cầu của bạn dù bạn đã thay đổi thứ tự cột trong cơ sở dữ liệu.
Kết Luận:
Trên đây chỉ là một vài điều cần lưu ý trong lập trình,hi vọng bạn có thể sửa chữa được những sai lầm của mình nhờ bài viết trên.
Similar topics
» Các điều kiển cơ bản trong C#
» Giao tiếp với cmd trong lập trình C#?
» Hướng dẫn - Lấy địa chỉ IP trong lập trình C#,VB.NET,ASP.NET,C,C++,Dephi,VB,JAVA,ASP
» Mảng trong ngôn ngữ lập trình java
» Lập trình hướng đối tượng trong Java
» Giao tiếp với cmd trong lập trình C#?
» Hướng dẫn - Lấy địa chỉ IP trong lập trình C#,VB.NET,ASP.NET,C,C++,Dephi,VB,JAVA,ASP
» Mảng trong ngôn ngữ lập trình java
» Lập trình hướng đối tượng trong Java
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
Thu Aug 23, 2012 5:38 am by Admin
» Tuyệt kỹ cua giai
Thu Aug 23, 2012 5:36 am by Admin
» NETCAT.........
Mon Aug 13, 2012 6:35 am by Admin
» Bảo mật CSDL bằng phương pháp mã hóa.
Tue Apr 17, 2012 10:04 pm by Admin
» Hàm mã hóa MD5 bằng JavaScript
Tue Apr 17, 2012 10:03 pm by Admin
» Giá của món quà
Fri Apr 13, 2012 6:01 am by Admin
» Sẽ chỉ yêu ai?
Fri Apr 13, 2012 6:01 am by Admin
» Cách đọc bảng chữ cái!
Thu Apr 12, 2012 10:37 pm by Admin
» Gắn trojan, keylog, virus vào website, forum
Tue Apr 10, 2012 1:14 am by Admin