long에서 MyCustomValueType까지 암시 적 캐스트 연산자를 사용하여 사용자 지정 값 형식 인 MyCustomValueType을 정의했습니다. Nullable에서 캐스트하는 방법 <T> 명시 적으로
public struct MyCustomValueType
{
private readonly long number;
public MyCustomValueType(long? number)
{
this.number = number.GetValueOrDefault(0);
}
public static implicit operator MyCustomValueType(long number)
{
return new MyCustomValueType(number);
}
}
그런 다음 컴파일러는 나에게 다음을 수행 할 수 있습니다 : 나는 방법을 알고 싶습니다
MyCustomValueType myCustomValueType = ((long?)null).Value;
: 후드에서
// ...
long? value = null;
MyCustomValueType myCustomValueType = (MyCustomValueType)value;
Console.WriteLine(myCustomValueType);
을 컴파일러에 캐스팅으로 문을 변환 (또는 더 나은 이유는 무엇입니까?) 이런 일이 일어 났습니까? 왜 컴파일러는 아무도 정의되지 않은 명시 적 캐스팅을 허용합니다. 컴파일러는 어떤 규칙을 적용합니까?
public static explicit operator MyCustomValueType(long number)
그러나 어떻게 든 그것을 이해 무엇 컴파일러 수용이 경우 :
또한 같은 MyCustomValueType 캐스팅 만 명시 적 연산자를 정의 할 때 등의 캐스팅도 가능하다는 것을 언급 아마한다 . 암시 적 연산자가있는 경우는 정말 혼란 스럽습니다. 누군가 설명해 주시겠습니까?
설명해 주셔서 감사합니다.이 코드는 Nullable을 T로 변환하려고 의도 한 것입니다. –