gpt4 book ai didi

c# - 使用 C# 中的通用列表和接口(interface)进行类型转换 - 寻找优雅的解决方案

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:19 25 4
gpt4 key购买 nike

以下面的例子为例(创建纯粹是为了说明这一点)。我想要做的是将系统的一部分与另一部分隔离开来,并且只想在程序集外部公开功能的特定子集,同时在内部处理完整的对象方法。

这段代码可以编译,但我在运行时得到了一个无效的转换异常。感觉这应该行得通,但不幸的是行不通。

谁能提出一个优雅的解决方案来解决这个问题?

更新:根据评论,我更改了此示例以更好地演示问题,我现在还在示例中展示了对我有用的解决方案...

    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;
}
}
}

最佳答案

IList<IName> restricted = people.Cast<IName>().ToList(); 

关于c# - 使用 C# 中的通用列表和接口(interface)进行类型转换 - 寻找优雅的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com