Main Content

.NET アプリケーションでの MATLAB データの処理

引数を返す MATLAB® 関数を呼び出すと、エンジンは、変数に指定した型に従って MATLAB データを変換しようとします。変換が失敗すると、エンジンは System.InvalidCastException をスローします。

次の表は、エンジンがどのように MATLAB データ型を .NET データ型にマッピングするかを示しています。サイズ マッピングの詳細については、MATLAB 配列から .NET 配列への変換を参照してください。

.NET での MATLAB 数値型

MATLAB データ型

サポートされている .NET データ型

double

System.Double
System.Double[]
System.Double[,,...]

single

System.Single
System.Single[]
System.Single[,,...]
System.Double

int8

System.SByte
System.SByte[]
System.SByte[,,...]
System.Int16
System.Int32
System.Int64
System.Single
System.Double
System.Decimal

uint8

System.Byte
System.Byte[]
System.Byte[,,...]
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64
System.Single
System.Double
System.Decimal

int16

System.Int16
System.Int16[]
System.Int16[,,...]
System.Int32
System.Int64
System.Single
System.Double
System.Decimal

uint16

System.UInt16
System.UInt16[]
System.UInt16[,,...]
System.Int32
System.UInt32
System.Int64
System.UInt64
System.Single
System.Double
System.Decimal

int32

System.Int32
System.Int32[]
System.Int32[,,...]
System.Int64
System.Single
System.Double
System.Decimal

uint32

System.UInt32
System.UInt32[]
System.UInt32[,,...]
System.Int64
System.UInt64
System.Single
System.Double
System.Decimal

int64

System.Int64
System.Int64[]
System.Int64[,,...]
System.Single
System.Double
System.Decimal

uint64

System.UInt64
System.UInt64[]
System.UInt64[,,...]
System.Single
System.Double
System.Decimal

複素数の double

Numerics.Complex
Numerics.Complex[]
Numerics.Complex[,,...]

logical

System.Boolean
System.Boolean[]
System.Boolean[,,...]

struct

MathWorks.MATLAB.Types.MATLABStruct
MathWorks.MATLAB.Types.MATLABStruct[]
MathWorks.MATLAB.Types.MATLABStruct[,,...]

この表内のすべての型

この表内の T 型の System.Nullable<T>

定数

サポートされている .NET データ型

NaN("double") の結果

System.Double.NaN

NaN("single") の結果

System.Single.NaN

Inf("double") の結果

System.Double.PositiveInfinity

Inf("single") の結果

System.Single.PositiveInfinity

-Inf("double") の結果

System.Double.NegativeInfinity

-Inf("single") の結果

System.Single.NegativeInfinity

.NET での MATLAB string 型および文字型

MATLAB データ型

サポートされている .NET データ型

string

System.String
System.String[]
System.String[,,...]

char

System.String
System.String[]
System.String[,,...]
System.Char
System.Char[]
System.Char[,,...]
System.Nullable<char>

string<missing>

ヌルの System.String

.NET での MATLAB ディクショナリ型

変換は次の場合にサポートされます。

  • MATLAB ディクショナリのキーが数値型、boolean 型、または欠損値でない string 型である。

  • 厳密に型指定されたディクショナリに変換する場合、TKeyTValueMATLAB 関数への .NET データ型の受け渡しに基づいて "最も近い一致" である。

例については、Use MATLAB Dictionary Objects in .NETを参照してください。

MATLAB データ型

サポートされている .NET データ型

dictionary

TKeyTValue をネイティブの .NET 型に変換できる場合は、次のいずれかのインターフェイス:

  • System.Collections.Generic.Dictionary<TKey,TValue>

  • System.Collections.Generic.IDictionary<TKey,TValue>

  • System.Collections.Generic.IReadOnlyDictionary<TKey,TValue>

  • System.Collections.IDictionary

TKeyTValue が指定されている場合は、次の型を使用して MATLAB ディクショナリを構成する必要があります。

MATLAB 型

必要な .NET 型

必要な C# キーワード

制限

logicalSystem.Booleanbool

なし

int8System.SBytesbyte

なし

uint8System.Bytebyte

なし

int16System.Int16short

なし

uint16System.UInt16ushort

なし

int32System.Int32int

なし

uint32System.UInt32uint

なし

int64System.Int64long

なし

uint64System.UInt64ulong

なし

singleSystem.Singlefloat

なし

doubleSystem.Doubledouble

なし

stringSystem.Stringstring

<missing> キーはサポートされない

値クラスまたはハンドル クラス

MathWorks.MATLAB.Types.MATLABObject

なし

キーとしてはサポートされない

struct

MathWorks.MATLAB.Types.MATLABStruct

なし

cell

System.Objectobject

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 をサポートしているすべてのプラットフォームで使用可能です。

関連するトピック