.NET アプリケーションでの MATLAB データの処理
引数を返す MATLAB® 関数を呼び出すと、エンジンは、変数に指定した型に従って MATLAB データを変換しようとします。変換が失敗すると、エンジンは System.InvalidCastException
をスローします。
次の表は、エンジンがどのように MATLAB データ型を .NET データ型にマッピングするかを示しています。サイズ マッピングの詳細については、MATLAB 配列から .NET 配列への変換を参照してください。
.NET での MATLAB 数値型
MATLAB データ型 | サポートされている .NET データ型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
複素数の |
|
|
|
| MathWorks.MATLAB.Types.MATLABStruct MathWorks.MATLAB.Types.MATLABStruct[] MathWorks.MATLAB.Types.MATLABStruct[,,...] |
この表内のすべての型 | この表内の |
定数 | サポートされている .NET データ型 |
---|---|
| System.Double.NaN |
| System.Single.NaN |
| System.Double.PositiveInfinity |
| System.Single.PositiveInfinity |
| System.Double.NegativeInfinity |
| System.Single.NegativeInfinity |
.NET での MATLAB string 型および文字型
MATLAB データ型 | サポートされている .NET データ型 |
---|---|
|
|
|
|
| ヌルの |
.NET での MATLAB ディクショナリ型
変換は次の場合にサポートされます。
MATLAB ディクショナリのキーが数値型、boolean 型、または欠損値でない string 型である。
厳密に型指定されたディクショナリに変換する場合、
TKey
とTValue
がMATLAB 関数への .NET データ型の受け渡しに基づいて "最も近い一致" である。
例については、Use MATLAB Dictionary Objects in .NETを参照してください。
MATLAB データ型 | サポートされている .NET データ型 |
---|---|
dictionary |
|
TKey
と TValue
が指定されている場合は、次の型を使用して MATLAB ディクショナリを構成する必要があります。
MATLAB 型 | 必要な .NET 型 | 必要な C# キーワード | 制限 |
---|---|---|---|
logical | System.Boolean | bool | なし |
int8 | System.SByte | sbyte | なし |
uint8 | System.Byte | byte | なし |
int16 | System.Int16 | short | なし |
uint16 | System.UInt16 | ushort | なし |
int32 | System.Int32 | int | なし |
uint32 | System.UInt32 | uint | なし |
int64 | System.Int64 | long | なし |
uint64 | System.UInt64 | ulong | なし |
single | System.Single | float | なし |
double | System.Double | double | なし |
string | System.String | string |
|
値クラスまたはハンドル クラス | MathWorks.MATLAB.Types.MATLABObject | なし | キーとしてはサポートされない |
struct | MathWorks.MATLAB.Types.MATLABStruct | なし | |
cell | System.Object | object |
MATLAB ディクショナリが構成されていない場合 (つまり、dictionary.isConfigured == false
)、ターゲット .NET ディクショナリではキーと値に任意の型を使用できます。結果のディクショナリ オブジェクトは空になります。
MATLAB 配列から .NET 配列への変換
.NET 配列の次元は、配列の要素へのアクセスに必要な添字の数です。次元の数を取得するには、.NET System.Array
型の Rank
プロパティを使用します。MATLAB 配列の次元数は、配列内の大きさが 1 でない次元の数です。
MATLAB は、MATLAB 配列の次元数が想定される次元数以下である限り、配列の次元数を .NET メソッド シグネチャに一致させます。たとえば、スカラー入力を、2 次元配列を想定するメソッドに渡すことができます。
次元数が N
である MATLAB 配列において、.NET 配列の次元数が N
より少ない場合、MATLAB 変換において大きさが 1 の次元が、最初のものから残りの次元数が .NET 配列の次元数と一致するまで削除されます。
最初の次元を削除しても MATLAB 配列のランクが .NET 配列よりも大きい場合、MATLAB は System.InvalidCastException
をスローします。
System.Array
のサポート
すべての MATLAB の型は System.Array
変数に代入できます。結果の配列は MATLAB 配列と同じ次元をもち、等価の基となる型をもちます。
.NET での MATLAB オブジェクトおよび cell 配列
.NET エンジンは、MATLAB ハンドルおよび値オブジェクトと cell 配列の要素を MathWorks.MATLAB.Types.MATLABObject
型または System.Array
型に変換します。MATLABObject
型は opaque 型です。これらのオブジェクトは、その処理方法を認識している MATLAB 関数に渡すことができますが、プログラムではオブジェクトのプロパティおよびメソッドに直接アクセスできません。
オブジェクト データ メンバーへのアクセスを提供するために、エンジンでは、C# アプリケーションでの dynamic
型がサポートされています。たとえば、次のコードでは UserData
プロパティにアクセスして MATLAB Figure オブジェクトで disp
メソッドを呼び出すことができます。
dynamic fig = eng.figure(); fig.UserData = 3.14; fig.disp( new RunOptions(nargout:0) );
次のコードは、MATLAB cell 配列の要素にアクセスする方法を示しています。ネイティブ .NET 型を取得するために適切な型を明示的に宣言する必要があります。
dynamic[ ] values = eng.eval(" { 3.14, 'Hello', uint8(42) } "); double e1 = values[0]; string e2 = values[1]; byte e3 = values[2];
動的な型指定のメリットについては、dynamic 型の使用や動的言語ランタイムの概要などの Microsoft® のドキュメンテーションを参照してください。これらの機能は、.NET Framework や .NET Core など、C# 4 をサポートしているすべてのプラットフォームで使用可能です。