2012-04-10 9 views
1

プロパティがList(of T) の型であるかどうかを知る必要がありますが、現在できません。私はTest System.Collections.Generic.List(of T)のプロパティ

TypeOf (UpdateTo.GetType.GetProperty(node.Name)) Is System.Collections.Generic.List(Of Object) 

をすれば、私は次のようなエラー

TypeOf関数(UpdateTo.GetType.GetProperty(node.Nameは))(オブジェクトの) System.Collections.Generic.Listタイプの表現で取得します 'System.Reflection.PropertyInfo'はタイプ 'System.Collections.Generic.List(Of Object)'になることはありません。

If xmlRequestNode IsNot Nothing Then 

       'if there is at least one property to update 
       If xmlRequestNode.ChildNodes.Count > 0 Then 

        'loop through each property that needs setting 
        For Each node As XmlNode In xmlRequestNode.ChildNodes 

         Try 

          'TODO: We do not want to set lists of objects. Currently we have issues where it tries to set the whole object instead of 
          'going into the object and set each property. 
          If UpdateTo.GetType.GetProperty(node.Name).GetType() IsNot GetType(System.Collections.Generic.List(Of Object)) Then 

           'and set it to the equivalent property on the user group model that was passed in (we don't use the node value as it would need casting and could be an object) 
           UpdateTo.GetType.GetProperty(node.Name).SetValue(UpdateTo, UpdateFrom.GetType.GetProperty(node.Name).GetValue(UpdateFrom, Nothing), Nothing) 

          End If 

         Catch ex As Exception 

          'and send details of the problem 
          Return "Could not find or set a property called " & node.Name 

         End Try 

        Next 

       Else 

        'and send details of the problem 
        Return "No updates were requested" 

       End If 

      Else 

       'and send details of the problem 
       Return "No object to update from was supplied" 

      End If 

答えて

2

まず、UpdateTo.GetType.GetProperty(node.Name).GetType()は常にPropertyInfoを返します。私はUpdateTo.GetType.GetProperty(node.Name).GetPropertyType()を意味すると思いますか?

次に、List(of T)はタイプではありません。 List(of String)は型ですが、List(of Object)のサブクラスではありません。あるタイプがList(of T)であるかどうかを簡単に知る方法はありません。おそらく、プロパティの型がIListを実装しているかどうかを単にテストする必要があります。

+1

ilistを実装すれば、どうすればテストできるのですか? – Steve

+0

また、 "GetPropertyType()"について...エラーが発生しました 'GetPropertyType'は 'System.Reflection.PropertyInfo'のメンバーではありません。 – Steve

+0

申し訳ありません。 '.GetPropertyType()'を '.PropertyType'に置き換えてください。 'IList'を実装しているかどうかをテストする場合は、' Type.IsSubclassOf(Type) 'メソッドを使用してください。 –

関連する問題