Возьмите следующий пример (созданный исключительно для демонстрации сути).То, что я пытаюсь сделать, - это изолировать одну часть системы от другой, и я хочу предоставить только определенное подмножество функциональности извне из сборки, одновременно работая с методами полных объектов.
Этот код компилируется, но я получаю недопустимое исключение приведения во время выполнения.Такое ощущение, что это должно работать, но, к сожалению, это не так.
Кто-нибудь может предложить элегантное решение этой проблемы?
ОБНОВЛЕНО: На основании комментариев я изменил этот пример, чтобы лучше продемонстрировать проблему,Я тоже в образце сейчас показываю решение, которое у меня сработало ...
using System.Collections.Generic;
namespace Test
{
public class PeopleManager
{
List<Person> people = new List<Person>();
public PeopleManager()
{
}
public void CreatePeople()
{
people.Add(new Person("Joe", "111 aaa st"));
people.Add(new Person("Bob", "111 bbb st"));
people.Add(new Person("Fred", "111 ccc st"));
people.Add(new Person("Mark", "111 ddd st"));
}
public IList<IName> GetNames()
{
/* ERROR
* Cannot convert type 'System.Collections.Generic.List<Test.Person>'
* to 'System.Collections.Generic.List<Test.IName>' c:\notes\ConsoleApplication1\Program.cs
*/
return (List<IName>) people; // <-- Error at this line
// Answered my own question, do the following
return people.ConvertAll(item => (IName)item);
}
}
public interface IName
{
string Name { get; set; }
}
internal class Person : IName
{
public Person(string name, string address)
{
this.Name = name;
this.Address = address;
}
public string Name
{
get;
set;
}
public string Address
{
get;
set;
}
}
}