타입이 다른 배열끼리의 변환
이래서 공부를 해야 한다는 생각이. ^^
그동안, 경우에 따라서 아래와 같은 식으로 코드를 작성해야 할 필요가 있었을 분들이 계실 텐데요.
object[] obj = new object[2] { Guid.NewGuid(), Guid.NewGuid() };
Guid[] guids = obj as Guid [];
물론, 마음 먹었던 것과는 달리 아쉽게도 위의 코드는 오류가 발생합니다.
Error 1 Cannot convert type 'object[]' to 'System.Guid[]' via a reference conversion,
boxing conversion, unboxing conversion, wrapping conversion, or null type conversion
d:\...\Form1.cs MyTest 27 29
이를 해결하기 위해서는, .NET 1.1 시절에는 아래와 같은 방식으로 코드를 작성해야 했습니다.
object[] obj = new object[2] { Guid.NewGuid(), Guid.NewGuid() };
Guid[] guids = new Guid[obj.Length];
int index = 0;
foreach (object item in obj)
{
guids[index ++] = (Guid)item;
}
세상이 좋아져서, .NET 2.0이 나왔고 Generic의 도움을 빌어 이젠 아래와 같이 작성할 수 있습니다.
private static Guid ObjectToGuidConverter(object from)
{
return (Guid)from;
}
private void Form1_Load(object sender, EventArgs e)
{
object[] obj = new object[2] { Guid.NewGuid(), Guid.NewGuid() };
Guid[] guids = Array.ConvertAll(obj, new Converter<object, Guid>(ObjectToGuidConverter)) as Guid[];
}
저처럼, .NET 1.0 시절부터 바쁘게 달려온 사람들한테는... 팁일 수 있겠죠. ^^
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]