Был на собеседовании и завалился. Теперь пытаюсь постепенно забить пробелы в знаниях - осталось немного вопросов, которые я не могу решить сам, поэтому прошу помощи: Есть запакованная структура, как изменить значение поля структуры, при этом не распаковывая её? UPD1: Вопрос на собеседовании который я тоже к сожалению завалил и не смог найти адекватного ответа за пару дней, может кто либо из вас знает : Есть метод в котором много строк кода (100 например), в конце выполнения метода выбивает исключение, как сохранить те данные (ту работу которую проделал данный метод) до исключения ? Буду признателен если хотя бы дадите совет куда "копать" !
Ответ
Через интерфейс
void Main()
{
var o = (I)new A();
(o).Inc();
(o).Dump();
}
interface I
{
void Inc();
}
struct A : I
{
public int f;
public void Inc()
{
f++;
}
}
выведет f = 1.
Код (нету unbox):
IL_0001: ldloca.s 01 // CS$0$0000
IL_0003: initobj UserQuery.A
IL_0009: ldloc.1 // CS$0$0000
IL_000A: box UserQuery.A
IL_000F: stloc.0 // o
IL_0010: ldloc.0 // o
IL_0011: callvirt UserQuery+I.Inc
IL_0016: nop
IL_0017: ldloc.0 // o
IL_0018: call LINQPad.Extensions.Dump
Комментариев нет:
Отправить комментарий