メインコンテンツまでスキップ

モデルの型を判定する

モデルの型を判定するにはIModelオブジェクトのIsメソッドやAsメソッドを用います。

型の判定

IModelオブジェクトのIsメソッドはモデルが指定の型と一致するかどうかを厳密に判定します。もし、派生クラスである場合は false となります。

public void CheckType(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// modelの型が"Actor"クラスかどうかを厳密に判定します
var isActor = model.Is("Actor");

// "Actor"の場合
if (isActor)
{
c.App.Output.WriteLine("sample", $"モデル : {model.Name} はActorクラスのインスタンスです。");
}
else // "Actor"でない場合(派生クラスもこちらになります)
{
c.App.Output.WriteLine("sample", $"モデル : {model.Name} Actorクラスのインスタンスではありません。");
}
}


IsInメソッドを用いると複数の型を判定できます。

public void CheckType(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// modelの型が"Actor"クラスまたは"UseCase"クラスかどうかを判定します
var isActorOrUseCase = model.IsIn("Actor,UseCase");

//...
}

IEnumerable<string>の配列を渡すことで検証もできます。

public void CheckType(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// modelの型が"Actor"クラスまたは"UseCase"クラスかどうかを判定します
var isActorOrUseCase = model.IsIn(new List<string>() { "Actor", "UseCase" });

//...
}

継承関係も含めた型の判定

モデルが特定クラスか、その派生クラスかどうかを判定するにはIModelオブジェクトのAsメソッドを用います。

public void TypeAs(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// "Actor"またはその派生クラスかどうかを判定します
var asActor = model.As("Actor");

if (asActor)
{
c.App.Output.WriteLine("sample", $"モデル : {model.Name} はActorクラスまたはその派生クラスのインスタンスです。");
}
else
{
c.App.Output.WriteLine("sample", $"モデル : {model.Name} Actorクラスまたはその派生クラスのインスタンスではありません。");
}
}