C#初心者で困っています。
VBのソース
Dim ShapeIDs As Object = Nothing
Dim ShapeID As Integer
処理A
For i = 0 To UBound(ShapeIDs)
ShapeID = ShapeIDs(i)
Next i
上記のようなソースがありこれをC#に移行したいのですが、UBound をC#ではどうしていいかわからず困っています。調べるとC#では変数名.Conunt、変数名.Lengthで取得できそうなのですが変数がObject型なのでShapeIDs.Conunt、ShapeIDs.Lengthはいずれもエラーとなってしまします。
何か良い方法がありましたらご教示願います。
※ShapeIDs 変数は処理Aで関数が呼ばれていてその関数でObject型配列が設定されています。
以上、宜しくお願い申し上げます。
VBからC#への移行について
Re: VBからC#への移行について
変換の前に,Visual Basic側で
・UBound等のMicrosoft.VisualBasicの関数を使わないように変更する
・Option Strict Onにする
などをして,C#に変換しやすいようにした方がよいかと思います。
ShapeIdsが本来Objectの配列であるならば,ShapeIdsの型をObject()に変更して,VBでもLengthを使うようにした方がよいでしょう。
・UBound等のMicrosoft.VisualBasicの関数を使わないように変更する
・Option Strict Onにする
などをして,C#に変換しやすいようにした方がよいかと思います。
ShapeIdsが本来Objectの配列であるならば,ShapeIdsの型をObject()に変更して,VBでもLengthを使うようにした方がよいでしょう。
Re: VBからC#への移行について
一応、Array.GetUpperBoundというのがありますが・・・
処理Aが何をしているのか分かりませんが
とりあえず、型が確定しているなら ShapeIDs を Object型にする必要はないと思います。
ShapeIDs が配列であることは確定なのですか? (配列ではない場合、UBoundでエラーが出てるとは思いますが・・・)らいよん さんが書きました: For i = 0 To UBound(ShapeIDs)
処理Aが何をしているのか分かりませんが
とりあえず、型が確定しているなら ShapeIDs を Object型にする必要はないと思います。
Re: VBからC#への移行について
YuO 様
VBは参考しているソースで私が作成したものではないのです。
C#で同じ処理ができないものかと質問させて頂きました。
C#で代替え処理を考えてみます。返信ありがとうございました。
sleep 様
処理Aで関数を使用しているのですがその関数の引数が Object型なのでをObject型をやめる事はできません。
C#で代替え処理を考えてみます。返信ありがとうございました。
VBは参考しているソースで私が作成したものではないのです。
C#で同じ処理ができないものかと質問させて頂きました。
C#で代替え処理を考えてみます。返信ありがとうございました。
sleep 様
処理Aで関数を使用しているのですがその関数の引数が Object型なのでをObject型をやめる事はできません。
C#で代替え処理を考えてみます。返信ありがとうございました。
Re: VBからC#への移行について
"Dim ShapeIds As Object"でググると,このトピックの他に,Mapコントロールの追加example [Chapter 2] | OpenなGISのことというサイトのみがヒットしました。
もし,このサイトを参考にしているのであれば,利用しているライブラリの公式サイトThe MapWindow ProjectからDocumentation - API Documentation - Shapefile - SelectShapesと辿れば,Examplesという項目があります。
そして,例えばSelectBox.csを選択すると,
これがそのままサンプルとして使えるのではないでしょうか。
もし,このサイトを参考にしているのであれば,利用しているライブラリの公式サイトThe MapWindow ProjectからDocumentation - API Documentation - Shapefile - SelectShapesと辿れば,Examplesという項目があります。
そして,例えばSelectBox.csを選択すると,
というコードがあります。
これがそのままサンプルとして使えるのではないでしょうか。