Span<T>
는 임의의 연속된 영역에 대한 형식 안전을 보장하며 최적의 속도를 보장합니다. 하지만 스택에 머물러야 하므로 제한적인데요, 다음의 코드는 request.Convert(values)
에서 컴파일 오류가 발생합니다.
public ref struct ConversionRequest
{
public ConversionRequest(double rate)
{
Rate = rate;
}
public double Rate { get; }
public void Convert(Span<double> values)
{
}
}
public class Converter
{
public void Handle(ref ConversionRequest request)
{
Span<double> values = stackalloc double[10];
//Will not compile!
request.Convert(values);
}
}
이 때 Convert()
메소드의 매개변수 앞에 scoped
를 붙이면 Convert()
메소드가 호출된 영역으로 제한하므로 정상 컴파일 됩니다.