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 =
0plot を呼び出します。
plot([0 defaultData])
GetValueOrDefault メソッドを使って既定の値を変更することができます。methodsview ウィンドウを開いて、次の関数シグネチャを探します。
既定値を変更する GetValueOrDefault の関数シグネチャ
入力引数 defaultValue を新しい値 -1 に設定し、null 値の field2 に対する結果をプロットします。
defaultData = GetValueOrDefault(field2,-1); plot([0 defaultData])