System.Nullable
引数の受け渡し
この例では、System.Nullable
型の引数をもち、その引数の基となる値の型が double
である .NET メソッドの処理方法を示します。
例では、System.Nullable
の入力引数をもつメソッドの呼び出し方法が示されます。MATLAB® の関数 plot
を使って、System.Nullable
の出力引数を処理する方法が示されます。
カスタム アセンブリ NetDocNullable
のビルド
この例で MATLAB コードを実行するために、NetDocNullable
アセンブリをビルドします。このアセンブリは、matlabroot
/extern/examples/NET/NetSample
フォルダーにある C# コードの NetDocNullable.cs
を使って作成されます。コードを表示するには、MATLAB エディターでファイルを開き、NetDocNullable
アセンブリをビルドします。
NetDocNullable
によって、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
プロパティは true (1
) となり、Value
プロパティは 10
となります。
null 値 []
を受け渡します。
field2 = SetField(cls,[])
field2 = System.Nullable<System*Double> Package: System Properties: HasValue: 0 Methods, Superclasses
HasValue
プロパティは false (0
) となり、Value
プロパティはありません。
MATLAB での System.Nullable
出力引数の処理
System.Nullable
オブジェクトを MATLAB で使用する前に、まず、null
値の処理方法を決定します。null
値を無視した場合、MATLAB 関数でこの値を使用すると予期しない結果になることがあります。
System.Nullable
クラスでは、null 値を処理する 2 種類の手法が提供されています。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
値を検出し、Value
プロパティを使って MATLAB 関数 plot
を呼び出します。
変数 field1
で plotValue
を呼び出し、線グラフを表示します。
plotValue(field1)
null
値をもつ変数 field2
で plotValue
を呼び出します。
plotValue(field2)
No Data
null
値の特殊処理が不要な場合には、GetValueOrDefault
メソッドを使用します。GetValueOrDefault
の関数シグネチャを表示するには、以下を入力します。
methodsview(field1)
次の関数のシグネチャを探します。
このメソッドにより入力変数が 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])