Add DataRowアクティビティの列配列の記述の最後の.ToStringについて

こんにちは。
UiPath Studio 2024.10.0 Community editionのユーザです。

Build DatatableアクティビティでDataTableXを構築後
ForEachで辞書変数をKeyで回してAdd DataRowアクティビティでXに行を追加します。
(添付画像はワークフローのイメージです)

その場合、
Add DataRowアクティビティの列配列に

New Object(){kv.Key,arr_DataRow.Length.ToString}

New Object(){kv.Key,TimeSpan.FromSeconds(arr_DataRow.Average(Function(r) TimeSpan.Parse(r("TimeSpan").ToString).TotalSeconds)).ToString}
などの構文で行を追加する場合、最後の.ToStringをよく見かけますが、
DataTable変数の値はObject型のため、最後の.ToStringは不要との認識で合っていますでしょうか。

どのような型で格納したいかに依存します。

文字列型で格納したいのであれば、元の型が文字列型でないのであれば、ToString()は必要です。

元の型のまま格納したいのであれば、ToString()は不要です。

DataTableは値がObject型なので、文字列型で格納しても、DataTableからExcelなどに出力する場合は結局、.ToStringが必要との認識で合っていますか?

違います。書き込むアクティビティにも依存しますが、型情報をなるべく保持してワークシートに書き込みますので、必ずしも文字列にする必要はありません。実現したい事や、使用するアクティビティによって使い分ける必要があります。

Add DataRowアクティビティの列配列情報に下記の構文を書いた場合、
arr_DataRow.LengthをDataTableからExcelに出力する場合、
Cint(arr_DataRow.Length)などと書かなくても、arr_DataRow.LengthだけでInt32型で出力されますか?

New Object(){kv.Key,arr_DataRow.Length}

Array.LengthはIntが返りますので、CIntする必要はありません。

これはExcelの特性ですか、それともObject型変数の特性ですか?それとも、DataTableからExcelに書き込む場合の特別な事例ですか?

基本的にはアクティビティの仕様です。

範囲書き込み(ワークブック)アクティビティは、DataTable内の各データの型情報を加味して入力されます

データテーブルをEXCELに書き込みアクティビティは、データの中身に応じて適切な形式になります。(これは例えばEXCEL上で日付文字列を打ち込むと日付として認識されることと類似かと思います。)

DataTableはObject型なのに、String型でも格納できるということは、Object型はそもそも2面性がある(Object型であると同時にString型でもある)という理解で合っていますか?

違います。Objectクラスは、すべての他のクラスで継承されているクラスになります。
派生クラスのインスタンスは、派生元クラスのインスタンスに格納することができますので、String型等をはじめとした任意のクラスをObjectインスタンスに格納することができます。

このあたりは、VB.netやUiPathに限らず、オブジェクト指向言語の一般的な挙動になりますので、詳しく理解したいのであれば、インターネット上で、「オブジェクト指向」「継承」あたりで検索すると解説したドキュメントが見つかると思いますので、参照いただくと良いかと思います。

難しいですが、Objectインスタンスは私の予想通り、2面性があると理解しても、大きな間違いではないようですね。ついでに教えてください。1回の継承だけでなく、二重継承する事例もあるのでしょうか?複雑になるので二重継承はやめた方が良いとは思いますが、、

繰り返しになりますが、違います。
正確に理解したいのであれば、オブジェクト指向のドキュメントを参照することをお勧めします。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.