2013-10-24 3 views
3

개체 처리기를 사용하려하고 메모리에 물건을 넣기 위해이 작업을 잘 수행했습니다. 내가 다시 물체를 볼 때하지만 반환 :f #과 같이 일반적인 unbox 기능이 있습니까?

object(object[,]) 

또는

object(double[,]) 

가 어떻게 C#에서이 언 박싱합니까? tybe는 [] [] 더블 더블인지 문제 또는 객체 나던 있도록

object(double[,]) boxedobj = .... 
double[,] unboxedobj = unbox(boxedobj); 

이상적으로는 난하지 않는 등

+2

예제의 요점은 알 수 없습니다. 이들은 참조 유형이므로 boxing/unboxing은 아무런 효과가 없습니다. – CodesInChaos

+0

예제를 이해할 수는 없지만 [Generics] (http://msdn.microsoft.com/en-us/library/ms379564(v=80) .aspx)의 작업처럼 들립니다. –

+1

왜 처음부터 상자에 넣으시겠습니까? – Reda

답변

8

F # unbox 함수는 사용자가 지정한 다른 유형으로 캐스트하는 것과 거의 같습니다. C#에서, 이것은 다음과 같이 작성할 수 있습니다 : 단지 (R)anything를 사용하여 주조로 번역하는 것이 대부분의 경우 unbox<'R> anything에서

var array = (double[,])boxed; 

:

static R Unbox<R>(object anything) { 
    return (R)anything; 
} 

그래서 double[,] 귀하의 경우에 당신이 뭔가를해야 할 것입니다. 이 경우에만 이 아닌이 아닌 다른 일반적인 방법을 사용하고 있고 두 가지 일반 유형간에 전송하는 경우가 있습니다. 이 경우 먼저 object으로 이동해야합니다 (값이 박스형인지 확인).

static R Unbox<R, T>(T anything) { 
    return (R)(object)anything; 
} 
+0

언제나처럼 매우 도움이된다. – nik

+0

C#'unbox '은 타입 유추가별로 유용하지 않다. 반환 값에 대해 해결되지 않으므로 'T'가 명시 적이어야합니다. – colinfang

4

, [,] 일반적인 방법으로이 일을하고 싶습니다 object로/주조, 당신의 요점은 자동 (배열 BTW, 값 유형이 아닌) 당신을 위해/언 박스 값 유형을 상자해야합니다

double d = 0.0; // not boxed 

object obj = d; // boxed 

double d2 = (double)obj; // unboxed 

더 큰 문제는 - 경우에 왜 당신에게 관리을 그 박스형인지 아닌지?

+0

고마워요! - 위의 위임을 참조하십시오 이유 또는 아마도 내가 아직도 m 배우기 때문에 가장 좋은 방법은 무엇인지 항상 모르겠다. ... – nik

관련 문제