your programing

선택적 매개 변수에서 DateTime의 기본값 설정

lovepro 2020. 10. 11. 11:07
반응형

선택적 매개 변수에서 DateTime의 기본값 설정


선택적 매개 변수에서 DateTime의 기본값을 어떻게 설정할 수 있습니까?

public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
    //Init codes here
}

nullable 형식과 null컴파일 시간 상수 라는 사실을 활용하는 해결 방법이 있습니다 . (하지만 약간의 해킹이며 실제로 할 수없는 경우가 아니면 피하는 것이 좋습니다.)

public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
    if (!addedOn.HasValue)
        addedOn = DateTime.Now;

    //Init codes here
}

일반적으로 다른 답변에서 제안 된 표준 오버로딩 접근 방식을 선호합니다.

public SomeClassInit(Guid docId)
{
    SomeClassInit(docId, DateTime.Now);
}

public SomeClassInit(Guid docId, DateTime addedOn)
{
    //Init codes here
}

addedOn = DateTime.Now'지금'이전에 모든 것이 추가되므로 결과가 전혀 나오지 않을 것이기 때문에 정말로 원하지 않았다고 생각합니다 . :)

기본값 DateTime은 다음과 같이 설정할 수 있습니다.

public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))

업데이트
SQL Server를 다루는 경우 기본값 (DateTime)이 1/1/0001 인 것을 허용하지 않는다는 점을 잊지 마십시오. SQL Server의 최소 날짜 시간은 1753 년 1 월 1 일 ( 설명 )입니다. 그러나 SQL의 DateTime2는 1/1/0001을 허용합니다.


LukeH의 솔루션을 다음과 같이 약간 수정합니다.

public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
    DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}

더 짧고 더 읽기 쉬운 것 같습니다.


선택적 매개 변수를 사용하지 마십시오.

public SomeClassInit(Guid docId, DateTime addedOn)
{
    SomeClassInitCore(docId, addedOn);
}

public SomeClassInit(Guid docId)
{
    SomeClassInitCore(docId, null);
}

private SomeClassInitCore(Guid docId, DateTime? addedOn)
{
    // set default value
    if (addedOn.IsNull) addedOn = DateTime.Now;

    //Init codes here
}

.NET 4.0에는 선택적 매개 변수가 있습니다. ( 구글은 또한 당신의 친구 입니다.)

편집 (Anthony Pegram이 정확하기 때문에 의견) ...

그리고 네, 그렇게 할 것입니다.

그러나 DateTime.Now (정적 속성, 해당 클래스)는 run-time 때까지 알 수 없습니다 . 따라서 선택 으로 사용할 수 없습니다 .

.NET 3.5 doesn't ... so then you would have to do what JS Bangs said...

public SomeClassInit(Guid docId) 
{ 
    return SomeClassInit(docId, DateTime.Now);
}

public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???) 
{ 
    //Init codes here 
}

or even the null checking/null value parameter from munificent's answer.

Cheers Anthony.


C# doesn't have optional parameters in this sense. If you want to make addedOn optional, you should write an overload that doesn't require that parameter, and passes DateTime.Now to the two-argument version.

참고URL : https://stackoverflow.com/questions/3031110/set-default-value-for-datetime-in-optional-parameter

반응형