2013-10-24 2 views
3

Я пытаюсь использовать обработчики объектов, и у меня есть эта работа, чтобы помещать материал в память. Но когда я снова смотрю на объект я вернусь:Есть ли общая функция unbox, например, в f #?

object(object[,]) 

или

object(double[,]) 

как я распаковывать это в C#?

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

В идеале я хотел бы сделать это в общем виде, так что это не имеет значения, является ли двойным [] или двойным [,] Тюб или объекта [,] и т.д.

+2

Я не понимаю суть ваших примеров. Это ссылочные типы, поэтому бокс/распаковка не влияет. – CodesInChaos

+0

Я не совсем понимаю пример, но это похоже на задание для [Generics] (http://msdn.microsoft.com/en-us/library/ms379564 (v = vs.80) .aspx) –

+1

Почему Вы бы набросили вещи на первое место? – Reda

ответ

8

Функция F # unbox в значительной степени просто применяется к любому другому типу, который вы указываете. В C#, это может быть записано так:

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

Так что в вашем случае с double[,] вам нужно что-то вроде:

var array = (double[,])boxed; 

В большинстве случаев unbox<'R> anything бы просто перевести на литье с использованием (R)anything. Единственный случай, когда это происходит не Работа - это когда вы находитесь в другом универсальном методе, и вы выполняете двух типичных типов. В этом случае вам нужно сначала перейти на object (чтобы убедиться, что значение в коробке):

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

спасибо, как всегда очень полезно – nik

+0

C# 'unbox ' не очень полезно, так как вывод типа doesn ' t для возвращаемого значения, поэтому 'T' должен быть явным. – colinfang

4

Если я не пропавший без вести своей точки, отбрасывая в/из object автоматически боксировать/распаковывать значение типов для вас (массив не является тип значения, КСТАТИ):

double d = 0.0; // not boxed 

object obj = d; // boxed 

double d2 = (double)obj; // unboxed 

Чем больше вопроса - почему вы ухода, если его в коробке или нет?

+0

Спасибо! - см. commment выше для почему или, возможно, потому, что я все еще участвую и не всегда знаю, что лучший способ ... – nik

Смежные вопросы