Передайте аргументы System.Nullable

Этот пример показывает, как обработать методы.NET с аргументами типа System.Nullable, базовым типом значения которых является double.

Пример показывает, как вызвать метод с входным параметром System.Nullable. Это использует функцию MATLAB® plot, чтобы показать, чтобы обработать выходной аргумент System.Nullable.

Создание пользовательского блока NetDocNullable

Чтобы выполнить код MATLAB в этом примере, создайте блок NetDocNullable. Блок создается с кодом C#, NetDocNullable.cs, в папке matlabroot /extern/examples/NET/NetSample. Чтобы видеть код, откройте файл в редакторе MATLAB и создайте блок NetDocNullable.

NetDocNullable задает метод SetField, который имеет аргументы System.Nullable.

 Подпись функции SetField

Загрузка блока NetDocNullable

Пример принимает, что вы помещаете блок в свою папку c:\work. Можно изменить пример, чтобы изменить путь, dllPath, блока.

dllPath = fullfile('c:','work','NetDocNullable.dll');
asm = NET.addAssembly(dllPath);
cls = NetDocNullable.MyClass;

Используйте переменную cls, чтобы вызвать SetField, который создает стоимость System.Nullable<System*Double> от вашего входа.

Передайте входные параметры System.Nullable

MATLAB автоматически преобразовывает double и значения null к объектам System.Nullable<System*Double>.

Передайте значение double.

field1 = SetField(cls,10)
field1 = 
  System.Nullable<System*Double>
  Package: System

  Properties:
    HasValue: 1
       Value: 10
  Methods, Superclasses

Свойство HasValue верно (1), и свойством Value является 10.

Передайте нулевое значение, [].

field2 = SetField(cls,[])
field2 = 
  System.Nullable<System*Double>
  Package: System

  Properties:
    HasValue: 0
  Methods, Superclasses

Свойство HasValue является ложным (0), и это не имеет никакого свойства Value.

Обработайте System.Nullable Выходные аргументы в MATLAB

Прежде чем вы будете использовать объект System.Nullable в MATLAB, сначала будете решать, как обработать значения null. Если вы игнорируете значения null, вы можете получить неожиданные результаты, когда вы используете значение в функции MATLAB.

Класс System.Nullable обеспечивает два метода для обработки нулевых значений. Чтобы обеспечить специальную обработку для значений null, используйте свойство HasValue. Чтобы обработать значение null таким же образом как double, используйте метод GetValueOrDefault.

Создайте функцию MATLAB, plotValue.m, который обнаруживает значения null и обрабатывает их по-другому по сравнению с числовыми значениями. Вход является типом System.Nullable<System*Double>. Если входом является null, функция отображает сообщение. Если входным значением является double, оно создает линейный график от 0 до значения.

function plotValue(x)
% x is System.Nullable<System*Double> type
if (x.HasValue && isfloat(x.Value))
  plot([0 x.Value])
else
  disp('No Data')
end

Функция plotValue использует свойство HasValue входного параметра обнаружить значения null и вызывает функцию plot MATLAB использование свойства Value.

Вызовите plotValue с переменной field1, чтобы отобразить линейный график.

plotValue(field1)

Вызовите plotValue с переменной field2, значением null.

plotValue(field2)
No Data

Если вам не нужна специальная обработка для значений null, используйте метод GetValueOrDefault. Чтобы отобразить подпись функции GetValueOrDefault, введите:

methodsview(field1)

Ищите следующую функциональную подпись:

 Подпись функции GetValueOrDefault

Этот метод преобразовывает входную переменную в double, таким образом, можно непосредственно вызвать функцию plot MATLAB:

myData = GetValueOrDefault(field1);
plot([0 myData+2])

Метод GetValueOrDefault преобразовывает значение null в числовое значение по умолчанию, 0.

defaultData = GetValueOrDefault(field2)
defaultData =
     0

Вызов plot:

plot([0 defaultData])

Можно изменить значение по умолчанию с помощью метода GetValueOrDefault. Откройте окно methodsview и ищите следующую функциональную подпись:

 Подпись функции GetValueOrDefault, чтобы изменить значение по умолчанию

Установите входной параметр defaultValue на новое значение, -1, и постройте результаты для значения null field2.

defaultData = GetValueOrDefault(field2,-1);
plot([0 defaultData])

Связанные примеры

Больше о

Внешние веб-сайты