[C#] List Collection 재정의(Override) 하기

|

List<T> 를 사용하다 보면 부가적으로 추가적인 정보를 저장을 할 필요가 있을때가 있다.

예를 들어서 음식점에서 테이블마다 메뉴를 여러개를 주문할 수가 있는데 해당 리스트에 테이블 번호와

사람수와 기타 다른 정보를 추가적으로 관리할 필요가 있게된다. 이때 다른 클래스를 새로 정의해서 사용해도 되지만

기존의 List를 재정의(Override)해서 기능추가를 해서 사용할 수 있다.


class MainApp
{
    static void Main()
    {

        ServingInfo NewCustomer = new ServingInfo();
        NewCustomer.tableNumber = "32";
        NewCustomer.peopleCount = 3;
        NewCustomer.Add(new Menu() { menuCode = "0233", customerComment = "중간맛으로 해주세요" });
        NewCustomer.Add(new Menu() { menuCode = "1443", customerComment = "소스 많이 넣어주세요" });
    }
}

class Menu
{
    public string menuCode { get; set; }
    public string customerComment { get; set; }

}

class ServingInfo : List<Menu>
{
    public string tableNumber { get; set; }
    public int peopleCount { get; set; }
    public string servingComment { get; set; }
}


ServingInfo 클래스는 기존의 List<T>를 Menu 만 받는 컬렉션으로 상속받아서, 기존의 List가 가지고 있는 모든기능을 사용한다.

여기에 테이블 정보나 사람수나 추가적인 주문정보를 입력이 가능하다.


따라서 다른곳에 해당 정보들을 저정 할 필요가 없이 새로 정의한 ServingInfo 에서 모두 접근이 가능하다.


And

[C#] 날짜 비교 (Datetime 시간차이 구하기)

|

.NET 에서는 두시간의 차이를 구하는데 사용하는 Timespan이라는 타입을 제공합니다.

사용법은 아래와 같습니다.


DateTime dtPreTime = new DateTime(2015,03,19,12,0,0);
DateTime dtNowTime;

DateTime.TryParse("2015-03-20 12:30:0", out dtNowTime);

TimeSpan timeDiff = dtNowTime - dtPreTime;

int diffDays = timeDiff.Days; //1
int diffHoures = timeDiff.Hours; //0
int diffMiniute = timeDiff.Minutes; //30
int diffSecond = timeDiff.Seconds; //0

double diffTotalHours = timeDiff.TotalHours; //24.5
double diffTotalMiniute = timeDiff.TotalMinutes; //1470.0

위에 소스를 보면 두개의 시간의 차이를 TimeSpan이라는 타입에 저장을 한 후에 Days나 Hours의 메소드를 이용해서

두시간의 날짜나 시간의 차이를 확인이 가능합니다.


여기서 주의할 것은 두 시간이 하루 정도 차이나는데 Hours를 보면 0이라는 값이 나옵니다. 이것은 단순히 시간의 값만 비교하기 

때문에 두시간의 총 시간차이를 구하려면 TotalHours라는 메소드를 이용해야합니다.


TimeSpan을 사용하지 않고 일정시간이 지났는지를 판단하는 것에는 단순히 이전시간에 .AddHours() 또는 .AddMiniute()를 이용해서

시간을 더하거나 빼준후에 비교해도 됩니다.


And

[C#] 숫자를 문자형으로 변경하기

|

숫자형을 문자로 변경하는것은 정말 간단합니다. .Tostring()만 하면 되니까요

실제로는 문자형 데이터를 화면에 표출할때는 일정한 양식이 필요할 때가있습니다.


int intValue = 300;
float floatValue = 300.13f;

Console.WriteLine(intValue.ToString("##.0")); //300.0
Console.WriteLine(intValue.ToString("##.#")); //300
Console.WriteLine(intValue.ToString("0###.#")); //0300

Console.WriteLine(floatValue.ToString("##.0")); //300.1
Console.WriteLine(floatValue.ToString("##.#")); //300.1
Console.WriteLine(floatValue.ToString("0###.#")); //0300.1

우선 #와 0를 비교해야하는데요.


#는 Digit placeholder 로써, 해당 자릿수에 데이터가 있으면 출력이 되고 없으면 출력이 되지않습니다.

0는 Zero placeholder 로써, 해당 자릿수에 데이터가 있으면 출력하고 없으면 0으로 출력이 됩니다.


String.Format()으로 다양한 형태로 사용할 수 있지만 간단하게 위에처럼 사용이 가능합니다.


And