具有多种类型的列表

2024-03-19

在C#中,有没有办法创建一个list拥有多种类型?我的列表项可以是int, string, DateTime, or char。我知道使用List<object> or ArrayList但由于封装的原因,这些都不是好的做法。有没有一个好的方法来实现这一目标?我认为创建一个界面可能会有所帮助,但我找不到办法。


我想出了第二种但不同的方法(可能在其他答案中描述,但现在在这里实现),这次利用隐式操作,并且还能够使用框架列表类型:

void Main()
{
    var list = new List<Item>
    {
        1,
        "foo",
        DateTime.Now,
        'x'
    };
    foreach (var item in list)
    {
        Console.WriteLine (item.ToString());
    }
    int i = list[0];
    string s = list[1];
    DateTime dt = list[2];
    char c = list[3];
    Console.WriteLine ("int: {0}, string: {1}, DateTime: {2}, char: {3}", i, s, dt, c);
}

enum Kind
{
    Int,
    String,
    DateTime,
    Char
}

class Item
{
    int intValue;
    string stringValue;
    DateTime dateTimeValue;
    char charValue;
    Kind kind;

    public object Value
    {
        get
        {
            switch (kind)
            {           
                case Kind.Int:
                    return intValue;
                case Kind.String:
                    return stringValue;
                case Kind.DateTime:
                    return dateTimeValue;
                case Kind.Char:
                    return charValue;
                default:
                    return null;
            }

        }
    }

    public override string ToString()
    {   
        return Value.ToString();
    }

    // Implicit construction
    public static implicit operator Item(int i)
    {
        return new Item { intValue = i, kind = Kind.Int };
    }
    public static implicit operator Item(string s)
    {
        return new Item { stringValue = s, kind = Kind.String };
    }
    public static implicit operator Item(DateTime dt)
    {
        return new Item { dateTimeValue = dt, kind = Kind.DateTime };
    }
    public static implicit operator Item(char c)
    {
        return new Item { charValue = c, kind = Kind.Char };
    }

    // Implicit value reference
    public static implicit operator int(Item item)
    {
        if(item.kind != Kind.Int) // Optionally, you could validate the usage
        {
            throw new InvalidCastException("Trying to use a " + item.kind + " as an int");
        }
        return item.intValue;
    }
    public static implicit operator string(Item item)
    {
        return item.stringValue;
    }
    public static implicit operator DateTime(Item item)
    {
        return item.dateTimeValue;
    }
    public static implicit operator char(Item item)
    {
        return item.charValue;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多种类型的列表 的相关文章

  • 如何获取枚举数作为常量?

    From 枚举中定义的项目总数 https stackoverflow com questions 856154 total number of items defined in an enum 我发现我可以使用以下方法获取枚举数 Enum
  • MVVM:来自 FileOpenPicker 的图像绑定源

    我将 OnActivated 添加到 app xaml cs 中 它可以正常工作 protected async override void OnActivated IActivatedEventArgs args var continua
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 如何反序列化 XML 文档

    如何反序列化此 XML 文档
  • 如何在建立上下文时设置连接超时-PrincipalContext

    using PrincipalContext ctx new PrincipalContext ContextType Domain Domain UserName Password UserPrincipal U new UserPrin
  • 有关shared_ptr的竞态条件示例

    为什么没有竞争条件代码片段 https godbolt org z nEYPYqdqK below include
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • 为什么 xcode IDE 认为 `friend` 是保留字

    我一直在开发一个个人项目 并在我创建的新类中包含以下代码 property readonly getter isFriend BOOL friend 它似乎没有任何问题 当我构建它时 它可以编译得很好 但是当我们在xcode IDE看起来像
  • 在 C++ 中,为什么 const 也可以工作时编译器选择非常量函数? [复制]

    这个问题在这里已经有答案了 例如 假设我有一堂课 class Foo public std string Name m maybe modified true return m name const std string Name cons
  • 来自同一基模板类的 C++ 重写函数,具有多重继承不明确的函数调用

    我需要打电话init int iNumber 从基类派生的函数 基类 h pragma once include stdafx h template
  • C 编程中的 rand() 问题? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我总是用 rand 得到相同的随机数序列 https stackoverflow com questions 1108780 why do i always get the same seque
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 如何通过分解 y 轴来减小 mschart 的高度

    如何降低 mschart 的高度 如下所示 编辑 就我而言 我不想查看中断图表 this chart1 ChartAreas 0 AxisY ScaleBreakStyle Enabled false 您似乎正在寻找AxisY ScaleB
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 用 std::generate_n 填充 std::map

    我想填写一个std map using std generate n但无法让它发挥作用 我尝试过的是这样的事情 unsigned number of pairs 5 std map
  • asio::this_coro::executor 的实现是什么

    在协程函数中 我们可以添加auto ex co await asio this coro executor 获取该协程的执行者 但当我想了解它的定义时 我发现了这个 Awaitable type that returns the execu
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web
  • 在派生类中访问基类变量

    class Program static void Main string args baseClass obj new baseClass obj intF 5 obj intS 4 child obj1 new child Consol

随机推荐

  • 如何使用ActionBar 夏洛克?

    如何在 Android 应用程序中使用操作栏 sherlock 我已经尝试过该网站 但没有成功 我想要一个背景图像 将应用程序名称居中 操作栏中没有图标 我尝试过这段代码 http tinyurl com pguqag5以及中的例子这个链接
  • 枚举的单独类? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 git 存储库向下移动到层次结构级别

    我现在已经搜索了几个小时 但找不到令人满意的答案 尽管这似乎是一个简单的新手问题 我基本上想要完成的是将当前位于项目文件夹旁边的 git 目录移动到项目文件夹中 最好这根本不应该改变存储库历史记录 尽管我不知道这实际上是否可能 我想这样做的
  • Scrapy 中每个项目有多个页面

    免责声明 我对 Scrapy 还很陌生 简单地提出我的问题 如何从页面上的链接检索 Item 属性并将结果返回到同一个 Item 中 给出以下示例 Spider class SiteSpider Spider site loader Sit
  • Azure 函数服务总线输出消息属性

    我正在尝试使用服务总线绑定输出在 JavaScript Azure 函数中设置服务总线消息的元数据 不幸的是 绑定似乎只支持身体 查看文档 我发现您可以通过以下方式在服务总线触发器中访问此信息context bindingData但我没有看
  • 用 ImageMapType、Tile 边界框替换 Google 地图 v3 中的 GTileLayer?

    我需要更新这段代码 radar layer getTileUrl function tile zoom var llp new GPoint tile x 256 tile y 1 256 var urp new GPoint tile x
  • 自动启动android服务

    如何在Android 3 x中自动启动服务 测试平板电脑是三星Galaxy 10 1 我的代码可以在带有 android 2 2 1 的无名平板电脑上运行该代码也可以在带有 android 版本 3 x 的 android 模拟器中运行 C
  • 如何从 VirtualBox 中修改 /etc/hosts

    我有一个应用程序 我必须更改它 etc hosts文件才能命中 这是我的新文件 127 0 0 1 localhost 127 0 0 1 local connectwithme 这在我的本地机器上很容易工作 我只是去local conne
  • Android Retrofit enqueue方法没有返回值

    fun getSurvey MutableList
  • Outlook 对象模型 - 连接到对话清理功能

    Outlook 2010 有一个功能称为对话清理 http office microsoft com en us outlook help use conversation clean up to eliminate redundant m
  • .Net:DataGridView 响应 IBinding.ListChanged 但不响应 CellValueChanged 事件处理程序

    我有一个自定义 IBinding 列表 它会引发 ListChanged 事件 我想在 ListChanged 事件之后重新着色 Datagridview 行 Datagridview 响应 ListChanged 事件并更改单元格值 但从
  • 允许将 Woocommerce 中特定产品类别的最多 3 个产品添加到购物车

    我尝试向免运费的客户发送最多 3 个免费样品 我创建了一些 0 价产品并将它们设置在 样品 产品类别中 该特定产品可以选择 单独出售 因此客户只能购买每个样品之 一 我不知道如何在购物车上只允许最多包含该产品类别的 3 个样品产品 任何帮助
  • 查找具有两个精确预定义差异的对应字符串的同位素

    我有一个名称向量 求和公式 例如 C 4 H 15 O 7 C 13 H 17 O 7 C 3 Cxiv 1 H 15 O 7 C 12 Cxiv 1 H 17 O 7 C 24 H 15 O 4 C 32 H 13 O 10 C 12 C
  • 将 Seq[Either[String, Int]] 转换为 (Seq[String], Seq[Int]) 的有效和/或惯用方法

    稍微简化一下 我的问题来自字符串列表input我想用函数解析parse返回Either String Int Then list map parse 返回一个列表Eithers 程序的下一步是格式化总结所有错误的错误消息or传递已解析的整数
  • QSlider 和按键事件

    我目前有一个 QSlider 可以使用鼠标滚动图像数据帧 我希望能够使用箭头键滚动单个步骤 一帧 这是我当前的 sliderMoved 代码 def sliderMoved self val retrieves the data array
  • 子对象的 MVC 模型绑定命名约定?

    当存在子属性时 我在默认模型绑定命名约定方面遇到问题 例如 我有一个 ViewModel 看起来像这样 public class UserViewModel public User BusinessObject get set 我的 Use
  • 应该避免在 C/C++ 中使用递归调用吗?

    是否应该避免在 C C 中使用函数的递归调用 我从事机器学习 数据挖掘工作 因此使我的代码具有可扩展性对我来说非常重要 当我使用Java时 我尽可能避免使用递归调用 因为我经常会导致调用堆栈溢出 尽管有一些选项可以控制分配给调用堆栈的内存量
  • 连接到生产者时出错:错误:ssl.certificate.location 失败

    环境信息 操作系统 例如Mac Arch Windows 10 Windows10 节点版本 例如8 2 1 10 4 1 NPM 版本 例如5 4 2 6 4 1 节点 rdkafka版本 例如2 3 3 2 5 1 重现步骤 节点 rd
  • 我可以在 Rails 中有一个名为“Transaction”的模型吗?

    我们希望有一个名为 Transaction 的模型 它与 Rails 中数据库的 交易 表相对应 但这会与现有的 ActiveRecord 交易功能发生冲突 除了为事务模型起一个不同的名称 我不想这样做 之外 我还能做些什么来支持该模型吗
  • 具有多种类型的列表

    在C 中 有没有办法创建一个list拥有多种类型 我的列表项可以是int string DateTime or char 我知道使用List or ArrayList但由于封装的原因 这些都不是好的做法 有没有一个好的方法来实现这一目标 我