Jenis pengembalian umum Marshal untuk interop komunikasi

Apakah mungkin untuk menetapkan tipe pengembalian generik sebagai non-generik untuk interop COM?

Katakanlah saya memiliki kelas berikut:

[ComVisible(true)]
public class Foo
{
    public IEnumerable<string> GetStr() // Generic return type
    {
        yield break;
    }
}

Saya tahu bahwa IEnumerable‹string› mengimplementasikan IEnumerable.

Bisakah saya memaksa tlbexp.exe (melalui atribut return: atau melalui cara lain) untuk mengekspos metode GetStr() sebagai metode yang mengembalikan IEnumerable?


person ichen    schedule 08.04.2010    source sumber


Jawaban (1)


Menurutku itu tidak mungkin, tidak. Ketika Anda mencapai batasan dengan marshaling interop COM, biasanya lebih baik membuat tipe wrapper terpisah dengan antarmuka yang ramah COM, dan membiarkan tipe aslinya seramah .NET.

person Mattias S    schedule 08.04.2010
comment
Oke, tapi bagaimana caranya?!? - person CoderDennis; 18.05.2011
comment
@CoderDennis: Tambahkan metode pembungkus dengan nilai pengembalian non-generik, misalnya public IEnumerable GetStrInterop() { return GetStr(); }, dan gunakan metode ini untuk interop. - person Heinzi; 03.04.2013