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
значения и вызовы MATLAB plot
функция с помощью Value
свойство.
Вызовите plotValue
с переменной field1
отобразить линейный график.
plotValue(field1)
Вызовите plotValue
с переменной field2
, null
значение.
plotValue(field2)
No Data
Если вам не нужна специальная обработка для null
значения, используйте GetValueOrDefault
метод. Отобразить GetValueOrDefault
функциональная подпись, введите:
methodsview(field1)
Ищите следующую функциональную подпись:
GetValueOrDefault
Функциональная подпись
Этот метод преобразует входную переменную в double
таким образом, можно непосредственно вызвать MATLAB plot
функция:
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])