, 기본 값은 배열이 될 수 없습니다.
public void Foo(int[] x = null)
{
x = x ?? new int[] { 5, 10 };
}
아니면 배열 변이 또는 발신자에 노출하지 않을거야 경우 :
그러나,이 문제를 피하는 방법 중 하나는 기본 null 값을 확인한 다음 필요한 경우 배열을 초기화하는 것입니다 이
null
가정
private static readonly int[] FooDefault = new int[] { 5, 10 };
public void Foo(int[] x = null)
{
x = x ?? FooDefault;
}
주 당신이 어떤 다른 이유로 사용할 거라고 값이 아닙니다. 세계적으로 적용 가능한 아이디어는 아니지만 컴파일 타임 상수로 기본값을 표현할 수없는 경우에는 잘 작동합니다. Encoding.UTF8
같은 것을 기본 인코딩으로 사용할 수 있습니다.
당신이 값 형식 매개 변수를 원하는 경우에, 당신은 단지 null 허용 한 것을 할 수 있습니다. 예를 들어, 매개 변수의 기본값을 컴파일 타임 상수가 아닌 컴파일 타임 정수로 기본 설정하려고한다고 가정합니다.
public void RunInParallel(int? cores = null)
{
int realCores = cores ?? Environment.ProcessorCount;
}
오우 와우는 참혹합니다. 그것은 당신이 실제로 배열을 사용할 수 있다는 것을 제외하고는 속성과 동일한 문제입니다. 초기화 된 배열을 선언 할 수없는 이유는 무엇입니까? 그것들은 일정합니다. –
@Graphain : 어떤 점에서 빈 배열이 아닌 다른 배열이 있습니까? 비어 있지 않은 배열은 항상 변경 가능합니다. 컴파일러는 무언가 (예 : 호출 된 메소드)가 내용을 변경 한 경우 각 호출에서 배열의 복사본을 만들어야합니다. –
@ 존 스키트 - 글쎄요. 기본값으로 상수가 필요하다면 컴파일러는 배열을 읽기 전용으로 처리 할만큼 똑똑하다고 생각할 것입니다. 변화하는 유일한 방법은 누군가가 반성 할 수있는 권리를 부여하는 경우이며, 이는 실제 상수 (예 : 문자열 등)에 대해 동일한 문제 일 수 있습니다. –