Как использовать Список <T>или Словарьв C # WinRT компонент - PullRequest
5 голосов
/ 15 февраля 2012

Я пытаюсь создать компонент C # WinRT для использования в приложениях в стиле metro (win8), и у меня возникают проблемы с проецируемыми типами.

Кажется, что типы данных IVector <> и IMap <> недоступныиз-за их уровня защиты?

Моя библиотека образцов WinMD имеет один класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Foundation.Collections;

namespace ClassLibrary1
{
    public sealed class Class1
    {
        public IVector<string> foo()
        {
            return new List<string>();
        }
    }
}

Я получаю следующие ошибки компилятора:

Inconsistent accessibility: return type 'Windows.Foundation.Collections.IVector<string>' is less accessible than method 'ClassLibrary1.Class1.foo()'

'Windows.Foundation.Collections.IVector<string>' is inaccessible due to its protection level

Что я делаю неправильно?

РЕДАКТИРОВАТЬ:

Ах, ха!

Оказывается, я не должен использовать имена типов WinRT напрямую, а вместо этого использовать их переведенные имена .NET.

Правильный код выглядит так:

namespace ClassLibrary1
{
    public sealed class Class1
    {
        public IList<string> foo()
        {
            return new List<string>();
        }
    }
}

1 Ответ

6 голосов
/ 15 февраля 2012

IIterable<T> проецируется в .NET как IEnumerable<T>, IVector<T> проецируется как IList<T>, а IMap<T> проецируется как IDictionary<T>. Проекция идет обоими путями - как для потребления, так и для разработки - так что вы просто должны всегда использовать прогнозируемые версии этих интерфейсов в своем коде .NET. Когда вы объявляете элемент возвращающим IList<T>, он будет отображаться как IVector<T> с точки зрения WinRT (например, из C ++ / CX). Точно так же, если вы реализуете IDictionary в своем классе, он будет отображаться как реализующий IMap в C ++ / CX.

Если я правильно помню, вы должны видеть все типы, уже сопоставленные, какими они должны быть при использовании Object Browser для проекта .NET.

...