0

クラスレベルでTとは何かについて言及しているのに、以下のステートメントを書くとエラーが発生する理由を知りたい

IList<T> targetObjectsCollection = new List<T>();
for (int counter = 0;  counter < dataTransferObjects.Count; counter++)
{
    targetObjectsCollection.Add(MappSharePointDAOToDTO(sharePointDaos[counter], dataTransferObjects[counter]));
}

次のステートメントに変更すると、エラーが発生しましたか??

IList<IMapperMarker> targetObjectsCollection = new List<IMapperMarker>();
for (int counter = 0;  counter < dataTransferObjects.Count; counter++)
{
    targetObjectsCollection.Add(MappSharePointDAOToDTO(sharePointDaos[counter], dataTransferObjects[counter]));
}

どんな体でも説明できます。

4

1 に答える 1

3

を定義していないようですT。プレースホルダーです。定義が必要です。

このコードは、定義があるコンテキストで使用された場合に機能する可能性がTあります。例えば、

private IList<T> AddDataTransferObjects(IList<T> dataTransferObjects)
    : where T : IMapperMarker
{
    IList<T> targetObjectsCollection = new List<T>();
    for (int counter = 0;  counter < dataTransferObjects.Count; counter++)
    {
        targetObjectsCollection.Add(MappSharePointDAOToDTO(sharePointDaos[counter], dataTransferObjects[counter]));
    }
    return targetObjectsCollection;
}

次のように呼び出した場合:

IList<IMapperMarker> dtoList = Something();
var list = AddDataTransferObjects(dtoList);

この場合、インナーTは type にバインドされIMapperMarkerます。

于 2013-05-30T04:44:57.250 に答える