0

私はvb.NETコードを以下の VB.NETのようにc#に変換しようとしています

  Dim _obj As Object = _srv.GetData(_criteria)
            If _obj IsNot Nothing Then
                For Each Comp As ComponentItem In DirectCast(DirectCast(_obj("ComponentInformation"), Result).Output, List(Of ComponentItem))
                    _lstComp.Add(New Core.Component() With {.ComponentID = Comp.BusinessUnitID, .ComponentName = Comp.BusinessUnitName})
                Next
            End If

C#

   object obj = srv.GetData(criteria);
          if (obj != null)
          {
    foreach (ComponentItem comp in (List<ComponentItem>)((Result)obj("ComponentInformation")).Output)
                  {
                      lstComp.Add(new Component
                      {
                          ComponentId = comp.BusinessUnitID,
                          ComponentName = comp.BusinessUnitName
                      });
                  }
}

コードを変換した後、エラーが発生しましたobj'は'変数'ですが、'メソッド'のように使用されますこのエラーを再確認する方法は?

4

3 に答える 3

4

objおそらく配列です。C#では、角かっこを介してそのメンバーにアクセスする必要があります[]。したがって、次のようになります。

obj["ComponentInformation"]

編集:(礼儀@Groo

あなたはあなたのラインを変更する必要があります:

object obj = srv.GetData(criteria);

代わりにobject、メソッドによって返されるタイプを指定する必要があります。varまたは、暗黙的に型指定された変数を持つために使用できます。

var obj = srv.GetData(criteria);
于 2012-12-28T09:54:07.200 に答える
1

objectに変更var

var obj = srv.GetData(criteria);

と ...

For Each Comp As ComponentItem In DirectCast(DirectCast(_obj["ComponentInformation"], Result).Output, List(Of ComponentItem))
于 2012-12-28T09:54:46.650 に答える
0

sが導入されたv4.0より前のC#は、dynamicVBのように遅延バインディングをサポートしていません。

_obj("ComponentInformation")

objectしたがって、次のタイプの変数に対して次のようなものを記述することはできません。

_obj["ComponentInformation"]

C#で、dynamicまたはリフレクションAPIを使用しない場合(たとえば、COMオブジェクトを使用する場合)。

適切なタイプ(インデクサーを持つ)の変数を宣言するか、を使用するdynamicか、リフレクションAPIを使用する必要があります。

于 2012-12-28T10:03:12.523 に答える