본문 바로가기
C#

C# - 확장메소드 사용법 및 예시

by 개발 그리고 게발 2021. 7. 15.
728x90

서비스 규모가 커지면 나름의 필요에 따라서 메소드를 임의로 추가해서 공용으로 쓸일이 생기기도 합니다.

이때 임의로 특정함수를 추가할 수 있는데 static클래스로 추가하여 공용으로 사용할만한 함수를 추가 할 수 있습니다.

아래의 예시를 참고하여 사용법을 알아보겠습니다.

 

 


 

ExtentionMethod.cs

 

CutString

string형식의 문자열을 사용할 경우에 CustString확장메소드를 이용하고 loc변수를 붙이면 loc까지 문자열의 길이를 잘라냅니다.

문자열의 길이가 자르려는 길이보다 작을 경우 문자열을 반환합니다.

 

GetLastValue

List<string> 형식의 배열에서 맨 마지막 요소만 가져옵니다.

 

HasDataColumn

where조건으로 List형의 DataType을 DataTable인 것만 한정 했으며 내부의 요소중에 컬럼이 있는지 체크합니다.

 

public static class ExtentionMethod
{
	// string형식의 문자열을 loc 길이까지 줄여서 return시킴
	public static string CutString(this string str, int loc)
	{
		string cut_str = string.Empty;

		if (str.Length > loc)
			cut_str = str.Substring(0, loc);
		else
			cut_str = str;

		return cut_str;
	}

	// List<string>의 배열에서 마지막 요소만 가져옴
	public static string GetLastValue(this List<string> lst)
	{
		string result = string.Empty;

		if (lst.Count > 0)
			result = lst[lst.Count - 1];

		return result;
	}
    
    	// List<DataTable>의 배열에서 Column이 있는지 체크
	public static bool HasDataColumn<T>(this List<T> lst) where T: DataTable
	{
		if (lst.Count > 0 && lst[0].Columns != null && lst[0].Columns.Count > 0)
		{
			return true;
		}

		return false;
	}
}

 

 

함수 정의 이후의 MathodName(this {DataType} {param}, {param2}, {param3} ...) 영역에서 DataType은 확장메소드를 추가할 DataType이며, paramDataType에 해당하는 값입니다. 그리고 그 이후에 추가 가능한 param2, param3은 함수를 사용할 때 추가 할 변수값 입니다.

 

확장메소드는 static클래스 안에서만 정의가 가능합니다.

 

 

사용 예시

 

CutString

string cut_result = "사과나무".CutString(2);
// 결과 : "사과"

string cut_result2 = "사".CutString(2);
// 결과 : "사"

 

GetLastValue

List<string> list = new List<string>() { "Tiger", "Lion", "Hippo" };
string last_value = list.GetLastValue();
// 결과 : "Hippo"

 

HasDataColumn

List<DataTable> list = new List<DataTable>();
bool result = list.HasDataColumn();
// 결과 : false

List<DataTable> list = new List<DataTable>();
DataTable dt = new DataTable();
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("year", typeof(int));
// 결과 : true
728x90

댓글