Pass System.Nullable Arguments
This example shows how to handle .NET methods with
System.Nullable type arguments, whose underlying value type
is double.
The example shows how to call a method with a System.Nullable
input argument. It uses the MATLAB®
plot function to show to handle a
System.Nullable output argument.
Build Custom Assembly NetDocNullable
To execute the MATLAB code in this example, build the NetDocNullable
assembly. The assembly is created with the C# code,
NetDocNullable.cs, in the
matlabroot/extern/examples/NET/NetSample
folder. To see the code, open the file in MATLAB Editor and build the NetDocNullable
assembly.
NetDocNullable defines method SetField
which has System.Nullable arguments.
Load NetDocNullable Assembly
The example assumes that you put the assembly in your
c:\work folder. You can modify the example to change the
path, dllPath, of the assembly.
dllPath = fullfile('c:','work','NetDocNullable.dll'); asm = NET.addAssembly(dllPath); cls = NetDocNullable.MyClass;
Use the cls variable to call SetField,
which creates a System.Nullable<System*Double> value
from your input.
Pass System.Nullable Input Arguments
MATLAB automatically converts double and
null values to
System.Nullable<System*Double> objects.
Pass a double value.
field1 = SetField(cls,10)
field1 =
System.Nullable<System*Double>
Package: System
Properties:
HasValue: 1
Value: 10
Methods, Superclasses
The HasValue property is true (1) and
the Value property is 10.
Pass null value, [].
field2 = SetField(cls,[])
field2 =
System.Nullable<System*Double>
Package: System
Properties:
HasValue: 0
Methods, Superclasses
The HasValue property is false (0), and
it has no Value property.
Handle System.Nullable Output Arguments in MATLAB
Before you use a System.Nullable object in MATLAB, first decide how to handle null values. If you
ignore null values, you might get unexpected results when you
use the value in a MATLAB function.
The System.Nullable class provides two techniques for
handling null values. To provide special handling for null
values, use the HasValue property. To treat a
null value in the same way as a
double, use the GetValueOrDefault
method.
Create a MATLAB function, plotValue.m, which detects
null values and treats them differently from numeric
values. The input is a System.Nullable<System*Double>
type. If the input is null, the function displays a message.
If the input value is double, it creates a line graph from
0 to the value.
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
The plotValue function uses the HasValue
property of the input argument to detect null values and
calls the MATLAB
plot function using the Value
property.
Call plotValue with variable field1 to
display a line graph.
plotValue(field1)
Call plotValue with the variable field2,
a null value.
plotValue(field2)
No Data
If you do not need special processing for null values, use
the GetValueOrDefault method. To display the
GetValueOrDefault function signature, type:
methodsview(field1)
Look for the following function signature:
GetValueOrDefault Function Signature
This method converts the input variable to double so you
can directly call the MATLAB
plot function:
myData = GetValueOrDefault(field1); plot([0 myData+2])
The GetValueOrDefault method converts a
null value to the default numeric value,
0.
defaultData = GetValueOrDefault(field2)
defaultData =
0Call plot:
plot([0 defaultData])
You can change the default value using the
GetValueOrDefault method. Open the
methodsview window and look for the following function
signature:
GetValueOrDefault Function Signature to Change
Default
Set the defaultValue input argument to a new value,
-1, and plot the results for null
value field2.
defaultData = GetValueOrDefault(field2,-1); plot([0 defaultData])