VBからC#への移行について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
らいよん
記事: 10
登録日時: 1年前

VBからC#への移行について

#1

投稿記事 by らいよん » 1年前

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型配列が設定されています。

以上、宜しくお願い申し上げます。

YuO
記事: 908
登録日時: 7年前
住所: 東京都世田谷区

Re: VBからC#への移行について

#2

投稿記事 by YuO » 1年前

変換の前に,Visual Basic側で
・UBound等のMicrosoft.VisualBasicの関数を使わないように変更する
・Option Strict Onにする
などをして,C#に変換しやすいようにした方がよいかと思います。

ShapeIdsが本来Objectの配列であるならば,ShapeIdsの型をObject()に変更して,VBでもLengthを使うようにした方がよいでしょう。

sleep

Re: VBからC#への移行について

#3

投稿記事 by sleep » 1年前

一応、Array.GetUpperBoundというのがありますが・・・
らいよん さんが書きました: For i = 0 To UBound(ShapeIDs)
ShapeIDs が配列であることは確定なのですか? (配列ではない場合、UBoundでエラーが出てるとは思いますが・・・)

処理Aが何をしているのか分かりませんが
とりあえず、型が確定しているなら ShapeIDs を Object型にする必要はないと思います。

らいよん
記事: 10
登録日時: 1年前

Re: VBからC#への移行について

#4

投稿記事 by らいよん » 1年前

YuO 様
VBは参考しているソースで私が作成したものではないのです。
C#で同じ処理ができないものかと質問させて頂きました。
C#で代替え処理を考えてみます。返信ありがとうございました。

sleep 様
処理Aで関数を使用しているのですがその関数の引数が Object型なのでをObject型をやめる事はできません。
C#で代替え処理を考えてみます。返信ありがとうございました。

YuO
記事: 908
登録日時: 7年前
住所: 東京都世田谷区

Re: VBからC#への移行について

#5

投稿記事 by YuO » 1年前

"Dim ShapeIds As Object"でググると,このトピックの他に,Mapコントロールの追加example [Chapter 2] | OpenなGISのことというサイトのみがヒットしました。
もし,このサイトを参考にしているのであれば,利用しているライブラリの公式サイトThe MapWindow ProjectからDocumentation - API Documentation - Shapefile - SelectShapesと辿れば,Examplesという項目があります。
そして,例えばSelectBox.csを選択すると,

コード: 全て選択

                if (sf.SelectShapes(ext, 0.0, SelectMode.INTERSECTION, ref result))
                {
                    int[] shapes = result as int[];
                    if (shapes == null) return;
                    for (int i = 0; i < shapes.Length; i++)
                    {
                        sf.set_ShapeSelected(shapes[i], true);
                    }
                }
というコードがあります。
これがそのままサンプルとして使えるのではないでしょうか。

返信

“C言語何でも質問掲示板” へ戻る