メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

System.Nullable 引数の受け渡し

R2025b

この例では、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 メソッドが定義されます。

戻り値の型名前引数
System.Nullable
<System*Double> RetVal
SetField(NetDocNullable.
MyClass this, System.Nullable
<System*Double> db)

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)

次の関数のシグネチャを探します。

名前戻り値の型引数
GetValueOrDefaultdouble scalar RetVal(System.Nullable
<System*Double> this)

このメソッドにより入力変数が double に変換されるため、MATLAB 関数 plot を直接呼び出すことができます。

myData = GetValueOrDefault(field1);
plot([0 myData+2])

GetValueOrDefault メソッドは、null 値を既定の数値 0 に変換します。

defaultData = GetValueOrDefault(field2)
defaultData =
     0

plot を呼び出します。

plot([0 defaultData])

GetValueOrDefault メソッドを使って既定の値を変更することができます。methodsview ウィンドウを開いて、次の関数シグネチャを探します。

名前戻り値の型引数
GetValueOrDefaultdouble scalar RetVal(System.Nullable
<System*Double> this,
double scalar
defaultValue)

入力引数 defaultValue を新しい値 -1 に設定し、null 値の field2 に対する結果をプロットします。

defaultData = GetValueOrDefault(field2,-1);
plot([0 defaultData])

参考

トピック