.NET Genericsを使用してArcObjectsを格納していますか?


11

.NETでジェネリック型を使用して、ILayer、IFieldなどのArcObjectsを格納することにはどのような影響がありますか?

これらの種類の値を使用すると、コンパイラは警告をスローします

public class Foo
{
    private List<ILayer> fooLayers;

    public List<ILayer> FooLayers
    {
        get { ... }
        set { ... }
    }
}

ここに警告があります:

警告15タイプライブラリエクスポーターの警告処理 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved(value)、ArcMemorialCore'。警告:タイプライブラリエクスポーターは、シグネチャでジェネリックタイプインスタンスを検出しました。汎用コードはCOMにエクスポートできません。ArcMemorialCore

私の懸念は、警告の存在だけでなく、優れた設計プラクティス、パフォーマンスなどにもあります。


どのような警告が表示されますか?
リードCopsey

4
あなたの質問にもいくつかのコンテキストを追加してください。オブジェクトの使用方法について詳しく知る必要があります。私の知る限り、このようなArcObjectsクラスまたはインターフェイスの使用には固有の問題はありません。
キースG

警告は何と言っていますか?
Hugo Estrada

エラーまたは警告が表示されますか?
ジェイカミンズ

警告。それはうまくコンパイルします。私の興味は警告の存在を超えています。これは、パフォーマンス、優れた設計慣行などの点でより懸念事項です。警告は次のとおりです:警告15タイプライブラリエクスポーター警告処理 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved(value)、ArcMemorialCore'。警告:タイプライブラリエクスポーターは、シグネチャでジェネリックタイプインスタンスを検出しました。汎用コードはCOMにエクスポートできません。
George Silva

回答:


10

受け取った警告は、クラス(またはアセンブリ)が次のようにマークされているためです。

[ComVisible(true)]

これにより、COMオブジェクトと互換性のない型を使用するとコンパイラーが警告を発行します。

とはいえ、ArcObjectタイプでジェネリックを使用しても問題はありません。ただし、これらは、アプリケーションの内部にある型に対してのみ使用する必要があります。つまり、値のセットを操作している場合です。


これに加えて、COM +がジェネリック型名を参照することだけが問題であると私は信じていList<object>ます。CLRからCOM +への移行は問題になりません。
Dandy

1
プロパティを[ComVisible(false)]としてマークし、クラス(または.NET 2.0+では推奨されない方法であるアセンブリ全体)を[ComVisible(true)]としてマークすることを許可することで、この種の警告を回避できます。
Petr Krebs


2

コンパイルしても問題ありません。

C#3.5を使用しています

using System; 
using System.Collections.Generic; 
using System.Web;
using ESRI.ArcGIS.Carto;  //Perhaps not having this reference is the issue?

public class Foo
    {
        private List<ILayer> _fooLayers;

        public List<ILayer> FooLayers
        {
            get { return _fooLayers; }
            set { _fooLayers = value; }
        }
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.