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.
Загрузка блока NetDocNullableПример принимает, что вы помещаете блок в свою папку c:\work. Можно изменить пример, чтобы изменить путь, dllPath, блока.
dllPath = fullfile('c:','work','NetDocNullable.dll'); asm = NET.addAssembly(dllPath); cls = NetDocNullable.MyClass;
Используйте переменную cls, чтобы вызвать SetField, который создает стоимость System.Nullable<System*Double> от вашего входа.
System.NullableMATLAB автоматически преобразовывает 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])