Это смешно, я знаю ... Но Heres демо:делегат с обнуляемого параметром реф, который может быть пустым
class Foo
{
// A lot of data in the nullable class foo.
}
class bar
{
public delegate void FooHandler(object sender, ref Foo f);
public event FooHandler FooChanged;
}
Проблема заключается в том, что я хочу, чтобы установить «F» в нуль в обработчик событий, но Я не могу передать null как ref. Я попробовал это вместо этого:
public delegate void FooHandler(object sender, ref Foo? f);
Но Foo является нулевым, так что это не работает. Затем я попытался изменить метод invoke для обработчика и установить фиктивный нулевой элемент для передачи, который тоже не работает. Я попытался использовать вместо ref, так как out не нуждается в инициализированной переменной, и это скомпилировано, но не запускалось.
Это действительно странно, и я никогда не видел ничего подобного. Я мог бы изменить класс Foo на не-nullable, чтобы я мог реализовать его как Nullable, или я мог бы добавить свой собственный флаг Foo.HasValue и сделать это таким образом ... Но нет ли способа сделать это, не меняя класс Foo ?
Общая схема событие 'FooHandler (объект отправителя, EventArgs e) '. Что вы пытаетесь решить, изменив этот шаблон и установив аргументы arg в null? – ChrisWue
Это может абсолютно работать, но вы не предоставили нам полный код для любого из параметров, которые вы пробовали. Я отправлю * рабочий * пример, но, конечно, это не покажет, какая разница ... –
Классы по определению являются ссылочными типами и, следовательно, уже обнуляются, поэтому нет смысла обертывать их нулевым типом , Конструкция 'Nullable' предназначена для предоставления типов значений (которые по определению не равны нулю) для представления нулевого значения. –