逻辑及其在 Collections.Generic 和继承中的应用

2023-12-01

一切都继承自对象。这是继承的基础。一切都可以隐式地构建继承树,即。

object me = new Person();

因此,遵循这一逻辑结论,一群人也将是一组对象:

List<Person> people = new List<Person>();
people.Add(me);
people.Add(you);
List<object> things = people; // Ooops.

不过,这是行不通的,设计 .NET 的人要么忽略了这一点,要么有一个原因,但我不确定是哪个原因。至少有一次我遇到了这种情况,这本来是有用的,但我最终不得不使用令人讨厌的黑客(子类化 List 只是为了实现强制转换运算符)。

问题是:这种行为有原因吗?是否有更简单的解决方案来获得所需的行为?

作为记录,我相信我想要这种行为的情况是一个通用打印函数,它通过调用 ToString() 并很好地格式化字符串来显示对象列表。


好吧,每个在 .net 中使用过泛型的人都一定曾经遇到过这种情况。

是的,直觉上它应该有效。不,在当前版本的 C# 编译器中并非如此。

埃里克·利珀特(Eric Lippert)对这个问题有一个非常好的解释(它分为十一个部分或其他内容,有些地方会让你费解,但非常值得一读)。看here.

edit:

挖出了另一个相关链接,这个链接讨论了java如何处理这个问题。看here

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

逻辑及其在 Collections.Generic 和继承中的应用 的相关文章

  • 从 WCF 发送的响应中删除 utf-8 标识符 (BOM)

    我正在用 c 创建 facebook Rest API 的克隆 我正在使用 facebook PHP sdk 对其进行测试 我遇到的问题是我的网络 Rest 服务发送的响应前面包含 utf 8 Bom 并且 Facebook SDK 无法正
  • DynamoDb:删除具有相同哈希键的所有项目

    考虑下表 Table documentId Hash Key userId Range Key 如何编写代码来删除所有具有相同内容的项目documentId并且最好不取回物品 目前 您不能仅通过传递 Hash 键来删除所有项目 要删除项目需
  • wpf C# 中的内存泄漏

    我正在使用 GalaSoft MvvmLight 套件和 WPF Toolkit 开发 WPF MVVM v3 5 中 应用程序DataGrid and DatePicker 但是 每次加载应用程序时 我都会面临应用程序中的大量内存泄漏Us
  • 部署.Net应用程序

    我在部署 net windows 应用程序时确实有某些疑问 部署机器是否需要安装 Net框架 如果不是这样 我的应用程序安装程序 exe 是否包含编译器或类库与设置集成 另外 我可以将我的 net 应用程序部署在除windows 是否支持s
  • 指定自定义序列化程序时,错误详细信息未反序列化

    我正在使用自定义XmlObjectSerializer在我的应用程序中 为此 我替换XmlSerializerOperationBehavior with MyOperationBehavior看起来像这样 public class MyO
  • COM Interop 挂起会冻结整个 COM 系统。如何取消COM调用

    我正在使用通过 COM Interop 包装器公开的第三方 dll 然而 其中一个 COM 调用经常冻结 至少不会返回 为了至少让我的代码更加健壮 我异步包装了调用 getDeviceInfoWaiter is a ManualResetE
  • 通过名称获取枚举成员的值?

    假设我有一个变量 其值 例如 listMovie 是一个名称enum member public enum Movies regMovie 1 listMovie 2 member whose value I want 在此示例中 我想获取
  • 永久铸造到超类

    If class Car Automobile 我可以 Car toyota new Car Automobile tauto Automobile toyota 但如果我这样做tauto GetType Name仍然会是Car 是否可以执
  • 为什么 localInit Func 在 Parallel.ForEach 中每个线程被调用多次

    我正在编写一些代码来处理大量数据 我认为让 Parallel ForEach 为它创建的每个线程创建一个文件会很有用 这样输出就不需要同步 至少对我而言 它看起来像这样 Parallel ForEach vals new ParallelO
  • .NET 中是否可以抑制第 2 代 GC 收集?

    我的程序分配了大量的实例 这些实例组成了长期存在的 DAWG 在构建此 DAWG 的过程中 有时进度会减慢 100 倍 这与 NET 执行第 2 代 GC 收集完美相关 在此期间 GC 时间百分比 为 99 5 并且 第 2 代总回收量 每
  • invalidate方法有什么作用?

    什么是invalidate方法做在winform app Invalidate method附带六超载里面形成control class of System Windows Forms 名称空间 谢谢 Windows 窗体使用 GDI 进行
  • AutoMapper 无法识别特定于配置文件的前缀

    我正在尝试使用 AutoMapper 从属性名称之前有前缀的类中获取数据 并将其映射到没有这些前缀的第二个类 但是 我不一定希望它always删除该前缀 我只想让它为这个特定的映射执行此操作 我的源类如下所示 public class Ad
  • 将参数传递给 .NET 定义的命令

    我需要在 Autocad 2000i 的命令行上编写一个命令 并且希望 autocad 提示输入参数 然后我的 vb net 程序将根据收到的参数进行操作 基本上我想我的解决方案都在这里 http through the interface
  • .NET 4.0 迁移后引用 .NET 1.0 程序集的 System.TypeLoadException

    有一个项目从 NET 3 5 迁移到 NET 4 0 该项目有一些对 NET 1 0 程序集的引用 这些程序集是 COM 对象的包装器 这些 NET 1 0 程序集和 COM 对象是外部公司的产品 该项目可以编译 但在运行时 当软件引用这些
  • .net 垃圾收集器何时运行?

    当我调试 net 代码时 如何知道垃圾收集器何时运行 我不想控制垃圾收集器何时运行 我只希望能够知道它何时运行 我有一些代码资源不足 我知道资源没有被使用 我想知道 GC 何时运行以释放它们 哦 我想到的资源是来自 Sql 连接池的连接 而
  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • 如何将隐藏字段从一个页面传递到另一页面?

    我有一个 Net 类库 我想从一次代码隐藏页面传递一个隐藏变量 并在另一个代码隐藏页面中获取它 请注意 我没有任何可以使用表单标签和 get post 方法的设计页面 aspx 页面 我们应该怎么做 注意 我想使用隐藏字段将值从一页传递到另
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St

随机推荐

  • WebsphereMQ 与 .Net Core 2.2

    我正在尝试使用 Net Core 2 2 连接到 WebsphereMQ 队列 我真的很困惑如何做到这一点 在展示我正在尝试 和失败 的内容之前 我想先澄清一下 Which lib should I use and how to get i
  • 常用表达。匹配两个单词之间的特定单词

    我使用 C 我有一个字符串 wordA wordB wordC wordB wordD 我需要匹配 wordS 和 wordS 之间出现的所有单词 我使用lookahead和lookbehind来匹配wordA和wordD之间的所有内容 如
  • Laravel 5.2 - 元标记规范 Url

    我正在尝试将元标记集成到我的布局 laravel 中 应用程序布局 view section title Homepage stop section canonical stop 我试图获取我的视图的当前网址 但实际上我收到此错误 未找到
  • 使用 JS 查找并替换文档中的特定文本字符

    我想知道是否有一种轻量级的方法可以使用 JavaScript 或 jQuery 来嗅出文档中的特定文本字符 说 并找到该字符的所有实例 进而 编写一个能力来替换这个的所有实例 我为初学者找到了这个片段 var str test 39 str
  • 如何在 Next.js 中设置没有 {styles.red} 的 className

    描述 我只想在 Next js 中使用没有 styles class name 约定的类的纯名称 我用 google 搜索并发现我需要配置 next config js 文件 那么 有人对此有好的参考吗 我有这个 它在 Next js 中运
  • Python for .NET:在多个版本中使用相同的 .NET 程序集

    我的问题 我有一个有 2 个版本的程序集 并且想在我的 Python 项目中同时使用它们 NET 库安装在 GAC MSIL 中 具有相同的公共令牌 lib dll 1 0 0 0 lib dll 2 0 0 0 在Python中我想要类似
  • 多选表视图单元格且无选择样式

    我有一个基本的 UITableView 我想启用Mail app样式复选标记 但没有选择样式 我有以下片段 define UITableViewCellEditingStyleMultiSelect 3 UITableViewCellEdi
  • Opencv重复性结果没有意义?

    我正在尝试通过重复性标准评估 SIFT 和 SURF 检测器 我发现下面的方法可以找到重复性 SIFT和SURF的对应关系 cv evaluateFeatureDetector img 1c img 2c h12 key points 1
  • 如何检测打印机是否连接?

    如何检测我的电脑中是否安装了打印机以及打印机连接是否处于活动状态 此类将列出所有已安装的打印机并为您提供打印机的状态 using System using System Management public class MyClass sta
  • 我在运行我的 React-native 应用程序时遇到以下问题

    无法使用 adb反向 连接到开发服务器 spawnSync home sumit Android platform tools adb ENOENT 我也尝试过使用 adb reverse tcp 8081 tcp 8081 但没有运气 现
  • YAML 多行数组

    In YAML 您可以轻松创建多行字符串 但是 我希望能够使用以下命令创建多行数组 主要是为了配置文件中的可读性 特点 A YAML array可以表示为 key1 key2 key3 A YAML sequence使用破折号 后跟空格 然
  • 无需模型检查即可实现符号执行

    我该如何实施symbolic execution for particular language不使用model checking and Finite State Machine FSM 例如not例如Java Path Finder 我
  • 如何提高 Watson Speech to Text 的准确性?

    据我了解 Watson Speech To Text 在某种程度上针对口语对话和 1 或 2 个发言者进行了校准 我还知道它可以比 WAV 和 OGG 更好地处理 FLAC 我想知道如何从声学角度提高算法识别能力 我的意思是 增加音量有帮助
  • 无法从程序集错误加载类型

    我编写了以下简单的测试来尝试学习温莎城堡的流畅界面 using NUnit Framework using Castle Windsor using System Collections using Castle MicroKernel R
  • jquery模拟按键“ctrl和+”

    我知道使用 CSS 移位来缩放页面的技术 I want to make a button for emulate the user that press CTRL and in same time In firefox if I press
  • 从 Twitter 获取用户的电子邮件地址 (Android)

    如何通过 Twitter API 获取用户的电子邮件地址 我正在使用 Twitter4j 通过 twitter 登录 我希望这能成功 请在您的请求回调结果中使用以下代码 TwitterloginButton setCallback new
  • 运行用户提供的 Java 代码时应该防范哪些安全风险?

    是否有关于在服务器上运行用户提供的 Java 代码的安全问题的完整列表 我已经 使用 10 秒的超时 在可用内存有限的单独进程中运行代码 使用 SecurityMangager 防止文件和网络 IO 在文件系统权限极其有限的帐户下运行代码
  • 无法运行Android应用程序,在eclipse中找不到.apk问题[重复]

    这个问题在这里已经有答案了 可能的重复 Android Eclipse 找不到 apk 最近我将 eclipse 的 ADT 插件更新到了最新版本 但之后我遇到了一个不寻常的问题 当我尝试在模拟器或设备上运行我的 Android 项目时 我
  • 如果存在多行,则排除列包含值的行

    表有 User Value john 284 john 200 john 5 sally 245 sally 180 sally 10 bill 90 bill 1000 bill 284 greg 10 greg 90 greg 2000
  • 逻辑及其在 Collections.Generic 和继承中的应用

    一切都继承自对象 这是继承的基础 一切都可以隐式地构建继承树 即 object me new Person 因此 遵循这一逻辑结论 一群人也将是一组对象 List