Main Content

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 メソッドが定義されます。

 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 では、doublenull の値を 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 を呼び出します。

変数 field1plotValue を呼び出し、線グラフを表示します。

plotValue(field1)

null 値をもつ変数 field2plotValue を呼び出します。

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])

関連する例

詳細