2012-02-29 9 views
0

カスタムタイプをVB6からC#のList <>にキャスティングしますか?

私はWebサービス(C#ASMX)にインポートしたVB6コンパイル済みDLLを持っています。

Public Type typeAccountInfo 
    singular  As String 
    code    As String 
    description  As String 
End Type 

Public Type timeSheetRowPost 
    lock   As Boolean 
    code   As String 
    from   As Long 
    to    As Long 
    fakt   As Boolean 
    ik    As String 
    ek    As String 
    ak    As String 
    accounts()  As typeAccountInfo 
End Type 

Public Type timeSheetDayPosts 
    date   As String 
    scheduleFrom As Long 
    scheduleTo  As Long 
    break   As Long 
    dagPost()  As timeSheetRowPost 
End Type 

Public Type timeSheet 
    period   As String 
    dayCount   As Long 
    days()  As timeSheetDayPosts 
End Type 

タイムシート> timeSheetDayPosts> timeSheetRowPosts> typeAccountInfo

私は私が必要とするすべてのデータを取得するVB6の機能を持っている:

はVB6で私はこの次のタイプがあります。

私は自分のWebサービスASMXでこれを実装すると、私は次のようにそれを行う:にVB6のタイプ(のSystem.Array)を鋳造または変換する方法について

public List<returnType> myFunction(input parameters){ 

    List<timeSheet> VB6Array = new List<timeSheet>(); 
    VB6Array = new List<timeSheet>((timeSheet[])VBWrapper.myVB6Func(input params)); 


    // at this point VB6Array holds all the data i need. And all i need (want) at this point is to be able to cast this VB6(system.array) to a List<> object that i can return as my returntype. 

// Pseudo : List<ReturnType> myNewReturnType = new List<ReturnType>((ReturnType[])VB6Array); 

// However all my tries has been without success....and what i get is You must implement a default accessor on System.Array because it inherits from ICollection. 

return myNewReturnType; 
} 

任意のヒントおよび/またはポインタリスト<>が高く評価されます。

ありがとうございます。

答えて

0

あなたはリストから手動ループに持っていて、クイックフィックスをしたい場合は、少なくとも新しい

List<your_new_similar_class> 

にデータをコピーすることができます。

+0

私は私の希望を持っていたが、それは私を与えた: は変換 – doge

+0

申し訳ありませんが近くに建てられたが、ノー「を介してリスト」に「 system.collections.generic.list」タイプを変換することはできません葉巻Da_smokes。あなたの健康に悪いです。 – Har

+0

リストを手作業でループして自分のタイプを追加するとうまくいきました。それはハウツーの問題でした。 – doge

0

これは多分ですか?

VB6Array = ((List<API.timeSheet>)VBWrapper.myVB6Func(input params)) 
.Select(x => new timeSheet { period = x.period, ... }).ToList(); 
+0

この情報は役に立ちましたか? – MarkH

+0

それはséの問題を解決しませんでしたが、いくつかの考えを開いた。しかし問題は解決されます。 – doge

関連する問題