有没有办法将通用列表转换为接口/基类类型列表?

2024-01-10

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

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

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

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!");
        }
    }
}

I can使用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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法将通用列表转换为接口/基类类型列表? 的相关文章

  • 使用 .Net 创建 CalDAV 服务

    我想在我的应用程序中创建一个外部用户可以查看的日历 CalDAV 基本上是 WebDAV iCalendar 格式似乎得到了相对广泛的支持 尽管某些客户端 例如 Outlook 不太支持这种格式 不过对我来说完全是新的 我想外部发布事件 我
  • 依赖注入:没有为此对象定义无参数构造函数

    我正在尝试使用依赖项注入 NET Framework 4 6 ASP NET MVC 但收到错误 No parameterless constructor defined for this object 如果我还提供一个无参数构造函数Hom
  • 使用 Rhino Mocks 存根只读属性

    我有一个带有私有集属性的类 我想用犀牛模拟来消除它 但是 当我尝试执行此操作时 它会出现编译时错误 提示我无法设置只读属性 我是使用 Rhino Mocks 的新手 所以我一定在这里遗漏了一些东西 public Interface IFoo
  • Thread.sleep vs Monitor.Wait vs RegisteredWaitHandle?

    以下项目有不同的目标 但我很有趣知道它们如何 暂停 问题 Thread sleep 它会影响系统性能吗 它是否会占用线程的等待时间 关于什么Monitor Wait 他们 等待 的方式有何不同 他们的等待会占用一个线程吗 关于什么Regis
  • [重复]

    这个问题在这里已经有答案了 有什么区别List
  • .net 4.5 可以与 .net 4.0 并行工作吗?

    我有兴趣安装 NET 4 5 但我听说这是就地升级 由于我公司的用户使用的是Windows XP 我无法发布任何使用 NET 4 5 的客户端应用程序 http visualstudio uservoice com forums 12157
  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • PreRequestHandlerExecute 中的会话为空

    在我的 ASP NET 4 0 应用程序中 我在 global asax cs 中有一个 PreRequestHandlerExecute 的事件处理程序 我想访问会话中的数据 大多数时候 会话是被定义的 但有时它是空的 有人可以解释一下什
  • ListView onScroll 事件

    我正在编写一个简单的 C 应用程序 我需要 Listview 上的 onScroll 事件 所以我创建了ListviewEx类继承原来的ListView 我找到了如何从 WinAPI 检测滚动消息 并修改了 WndProc 方法 现在我有这
  • C# HTTP 请求解析器[重复]

    这个问题在这里已经有答案了 可能的重复 将原始 HTTP 请求转换为 HTTPWebRequest 对象 https stackoverflow com questions 318506 converting raw http reques
  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 调整屏幕和字体设置的 WPF 应用程序(或者,我如何将 DLU 与 WPF 中的单元相关联?)

    在MFC中 对话框的设计使用DLUs http msdn microsoft com en us library bb847924 aspx 在 WPF 中 我们以 1 96 英寸为单位指定 虽然这确实会缩放窗口和视觉元素 但我们如何使 W
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐

  • 在 wpf 中显示用户控件的替代方法

    我想知道是否有其他显示方式usercontrols inside mainwindow在WPF应用程序中 目前我利用的可见性属性usercontrols单击按钮一次显示一个用户控件 我将用户控件的可见性设置为Hidden单击按钮后 我会更改
  • ImageIO脏内存不会被iOS自动清除

    我正在创建一个应用程序 它是一种画廊 它作为全屏查看器显示不同的媒体内容 分配工具显示 使用应用程序时 Live Bytes 参数不会增长到高于 40 Mb 同时 在我滑动页面 20 30 次后 该应用程序 100 被杀死 我检查了 Dir
  • 当 udf 函数不接受足够大的输入变量时 Spark DataFrames

    我正在准备一个带有 id 和特征向量的 DataFrame 以便稍后用于进行预测 我在我的数据帧上做了一个 groupBy 并在我的 groupBy 中将几列作为列表合并到一个新列中 def mergeFunction with 14 in
  • 检查表单的所有复选框是否都被选中

    我有多个从代码动态创建的复选框 所以我知道我可以使用以下方式获取复选框 foreach var checkBox in this Controls OfType
  • C#:HashSet的易失性读写

    我有一堂课 public class Checker private HashSet
  • 单击单选按钮时提交表单 - 单击单选按钮时提交表单并执行其他操作

    我有一个关于单选按钮和表单的 jQuery 问题 我有选项卡式内容设置 有 5 个选项卡设置 每个选项卡中有一个表单 每个表单由 5 个单选按钮和一个提交按钮组成 我有我的 jQuery 设置来验证是否首先进行了选择 然后使用 AJAX 提
  • Espresso 测试经常因 NoActivityResumedException 失败

    编辑 更新了描述和错误消息并添加了一些图像 还是有这个问题 我在运行浓缩咖啡测试时多次出现奇怪的错误 几次成功的测试运行后 测试开始失败 并出现以下异常 06 23 13 04 48 438 info TestRunner failed W
  • 如何在频繁更新的滑动数组中有效跟踪滚动最小值/最大值

    考虑以下 JavaScript 数据结构 let sensors sensor1 min 1 00 max 9 00 data timestamp 1517760374400 value 1 00 timestamp 15177603745
  • 无法理解 Rust 模块系统

    我出于教育目的创建了一个简单的项目 所以我有一个主要功能和 3 个特征Battery Display and GSM以及他们的实施 我希望 main 函数位于文件 main rs 中 而 3 个特征位于另一个名为 phone rs 的文件中
  • 如何在 Apache-Spark 中连接主从? (独立模式)

    我在用着Spark独立模式 https spark apache org docs latest spark standalone html以独立模式安装 Spark 的教程页面 1 我通过以下方式开始了大师生涯 sbin start ma
  • 错误:“非静态字段、方法或属性需要对象引用...”[重复]

    这个问题在这里已经有答案了 我正在用 C 创建一个应用程序 它的功能是评估给定的数是否是素数以及相同的交换数是否也是素数 当我在 Visual Studio 中构建解决方案时 它说 非静态字段 方法或属性需要对象引用 我在使用 voltea
  • 将 Spark 结构化流与 Confluence 架构注册表集成

    我在 Spark 结构化流中使用 Kafka Source 来接收 Confluence 编码的 Avro 记录 我打算使用Confluence SchemaRegistry 但与spark结构化流的集成似乎是不可能的 我已经看到这个问题
  • C# 每 X 分钟运行一个线程,但前提是该线程尚未运行

    我有一个 C 程序 需要每 X 分钟调度一个线程 但前提是之前调度的线程 从 X 分钟开始 当前尚未运行 一个普通的老Timer单独运行是行不通的 因为它每 X 分钟调度一个事件 无论先前调度的进程是否已完成 将要分派的进程执行其任务所需的
  • 如何在返回集合的 lambda 中使用异步

    我有一个异步 上游 方法 我试图遵循最佳实践 并在堆栈中全力以赴地进行异步 在 MVC 内的控制器操作中 如果我依赖 Result 我可以预料到会遇到死锁问题 将控制器操作更改为异步似乎是可行的方法 但问题是异步方法在 lambda 中被多
  • SSMS 从我的存储过程中删除预 BEGIN 注释

    我正在运行 SSMS 12 0 2000 8 如果我使用SSMS查询编辑器创建一个存储过程 如下例 之前的注释BEGIN当我执行 保存它时被删除 CREATE PROCEDURE myproc Say goodbye to this com
  • C# 检查 JSON 文件是否包含字符串

    我正在尝试这样做 以便我可以检查字符串是否在 json 中 例如 在我的 JSON 文件中存在 name Disp R name Disp L name Disp C 每当 Disp 在字符串中时 整个值都应该存储在列表中 我就是这样做的
  • MySql:限制一张表中某一列的更新权限

    我有一个表 我们称之为学生表 其模式称为注册 表学生有一个名为地址的列 我不希望某个用户更新该列 其他权限都可以 例如选择 插入 该表中以及该架构中的所有其他列都应该具有更新权限 这可行吗 您可以设置数据库 表 列的权限 但我真的不会尝试在
  • 艾里函数积分的根(matlab)

    我想解下面的方程 我在函数的定义上做错了 但我仍然不明白 function F myairyint x F integral x airy x 1000 end functi2 x myairyint x0 1 1 15 fsolve fu
  • 如何以可微分的方式计算几何平均值?

    如何使用 Pytorch 计算沿某个维度的几何平均值 有些数字可能是负数 该函数必须是可微的 几何平均值的已知 合理 数值稳定版本是 import torch def gmean input x dim log x torch log in
  • 有没有办法将通用列表转换为接口/基类类型列表?

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