gpt4 book ai didi

.net - 有没有办法将通用列表转换为接口(interface)/基类类型列表?

转载 作者:行者123 更新时间:2023-12-01 08:21:05 25 4
gpt4 key购买 nike

我试图向某人展示在他们创造的疯狂情况下使用接口(interface)。它们在列表中有几个不相关的对象,并且需要对每个对象中的两个字符串属性执行操作。我要指出的是,如果他们将属性定义为接口(interface)的一部分,他们可以使用接口(interface)对象作为作用于它的方法参数的类型;例如:

void PrintProperties(IEnumerable<ISpecialProperties> list)
{
foreach (var item in list)
{
Console.WriteLine("{0} {1}", item.Prop1, item.Prop2);
}
}

这似乎一切都很好,但是需要处理的列表没有(也不应该)用接口(interface)作为类型参数声明。但是,您似乎无法转换为不同的类型参数。例如,这失败了,我不明白为什么:
using System;
using System.Collections.Generic;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List<Test> myList = new List<Test>();
for (int i = 0; i < 5; i++)
{
myList.Add(new Test());
}

PrintList((IEnumerable<IDoSomething>)myList);
}

static void PrintList(IEnumerable<IDoSomething> list)
{
foreach (IDoSomething item in list)
{
item.DoSomething();
}
}
}

interface IDoSomething
{
void DoSomething();
}

public class Test : IDoSomething
{
public void DoSomething()
{
Console.WriteLine("Test did it!");
}
}
}

我可以使用 Enumerable.Cast<T>成员来执行此操作,但我正在寻找一种可能也适用于 .NET 2.0 的方法。看起来这应该是可能的;我错过了什么?

最佳答案

问题在于方法,而不是如何调用......

void PrintProperties<SP>(IEnumerable<SP> list) where SP: ISpecialProperties
{
foreach (var item in list)
{
Console.WriteLine("{0} {1}", item.Prop1, item.Prop2);
}
}

关于.net - 有没有办法将通用列表转换为接口(interface)/基类类型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/188769/

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