C# 参数中的键值对

2024-03-27

我正在寻找一种方法来实现以下功能:

myFunction({"Key", value}, {"Key2", value});

我确信匿名类型的某些东西会非常简单,但我没有看到它。

我能想到的唯一解决方案是params KeyValuePair<String, object>[] pairs参数,但最终会类似于:

myFunction(new KeyValuePair<String, object>("Key", value),
           new KeyValuePair<String, object>("Key2", value));

诚然,这要丑陋得多。

EDIT:

为了澄清,我正在写一个Message在两个不同系统之间传递的类。它包含一个ushort指定消息类型,以及与消息关联的“数据”对象的字符串字典。我希望能够在构造函数中传递所有这些信息,所以我能够这样做:

Agent.SendMessage(new Message(MessageTypes.SomethingHappened, "A", x, "B", y, "C", z));

或类似的语法。


当语法对于原本不错的模式来说很糟糕时,请更改语法。怎么样:

public void MyFunction(params KeyValuePair<string, object>[] pairs)
{
    // ...
}

public static class Pairing
{
    public static KeyValuePair<string, object> Of(string key, object value)
    {
        return new KeyValuePair<string, object>(key, value);
    }
}

Usage:

MyFunction(Pairing.Of("Key1", 5), Pairing.Of("Key2", someObject));

更有趣的是添加一个扩展方法string使其可配对:

public static KeyValuePair<string, object> PairedWith(this string key, object value)
{
    return new KeyValuePair<string, object>(key, value);
}

Usage:

MyFunction("Key1".PairedWith(5), "Key2".PairedWith(someObject));

Edit:您还可以通过派生使用不带通用括号的字典语法Dictionary<,>:

public void MyFunction(MessageArgs args)
{
    // ...
}

public class MessageArgs : Dictionary<string, object>
{}

Usage:

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

C# 参数中的键值对 的相关文章

  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 在 C 语言中替换宏内的宏

    我正在尝试使代码部分可重用 我下面的评论片段没有达到我想要的效果 define NAME ABC define LOG SIZE NAME LEN 我想LOG SIZE决心ABC LEN 我尝试过使用 但没能让它发挥作用 LOG SIZE在
  • JasperReports Server 参数依赖关系

    我有一份有两个输入参数的报告 两者都有一个保管箱 我可以在其中选择值 假设参数A 和参数B 是否可以使 ParameterB 依赖于 ParameterA 例如 如果我在 ParameterS 中选择汽车品牌 Honda 我应该只能看到 H
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • C++ 模板可以提供 N 个给定类的公共父类吗?

    我正在寻找一个 C 模板 它可以找到一组给定类的共同父级 例如 class Animal class Mammal public Animal class Fish public Animal class Cat public Mammal
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • 如何调用与现有方法同名的扩展方法? [复制]

    这个问题在这里已经有答案了 我有这样的代码 public class TestA public string ColA get set public string ColB get set public string ColC get se
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo
  • 对多个对象使用事件处理程序

    我有 20 件物品List
  • 如何在 Razor 编辑视图中显示选中的单选按钮 Asp net core mvc

    尽管 Razor 视图中的 Asp 网络核心代码 model List

随机推荐

  • jQuery 可通过溢出进行排序:隐藏;两个列表之间

    我有两个列表 使用 jQuery 可排序我可以在它们之间移动项目 productsList orderList sortable connectWith containerDiv disableSelection 但是 当我想使用自定义滚动
  • ParseInt 未转换为所需的类型

    这是我的代码 包主 import fmt reflect strconv func main i strconv ParseInt 10 10 8 fmt Println reflect TypeOf i 我预计i长度为 8 位 第三个参数
  • 如何在 Android 中打开 MS Office 文件 [重复]

    这个问题在这里已经有答案了 可能的重复 Android Microsoft Office 库 doc docx xls ppt 等 https stackoverflow com questions 4854947 android micr
  • Excel VBA - 删除最多*单词*的字符串内容

    我正在尝试删除字符串内容 直至字符串中包含的某个单词 例如 Emily has wild flowers They are red and blue 我想使用 VBA 来替换它 They are red and blue 即删除 他们 一词
  • YouTube Data API v3:无需打开浏览器即可从服务器上传视频

    我每天尝试从我的服务器上传视频到我的帐户 但浏览器无法访问 我可以在桌面上执行此操作 通过运行下面提到的脚本打开浏览器 请求我的权限并完成上传视频所需的完整授权 然后上传视频 python upload video py file clip
  • 我可以转换对象并访问 C++ 中的私有数据成员吗?

    我想访问类中的私有数据成员 类中没有成员函数来访问私有数据成员 这是私人的 我想上这门课 想知道如何打开它 一种方法是复制类的声明 将私有成员设为公共 然后将新类称为 some else 然后我重新解释转换并复制原始对象 这有效 但我想要一
  • 只做如果一天...批处理文件

    你好 我有一个批处理文件 如下所示 if day monday tuesday wednesday thursday friday goto yes else goto no 现在我知道第一行不起作用 我真正想要发生的事情 它会自动检查今天
  • 如何让通用ListView只显示用户的列表?

    我是 Django 新手 这是我第一次使用基于类的视图 我想使用通用 ListView 来显示用户拥有的 表 列表 到目前为止 我已经让它显示数据库中的所有表 但我只希望它显示登录用户的表格 这就是我的观点 from django shor
  • gcc -Wpadded 不提供任何警告

    我正在尝试使用 gcc 的 Wpadded 选项来了解 gcc 是否可以帮助我找出结构是否已填充 这是下面的代码 include
  • 从 R 中的 ca.jo 中的 Johannsen 协整方法估计 t 统计量

    我正在研究 R 中 vars 库中的小插图工作示例 我了解小插图中的大部分示例 除了小插图的表 5here https cran r project org web packages vars vignettes vars pdf 运行以下
  • Haskell 中具有多个参数的部分应用程序

    给定某个函数 f x1 x2 x3 xN 在多个地方部分应用它通常很有用 例如 对于 N 3 我们可以定义 g x f 1 x 3 然而 Haskell 中的标准部分应用程序并不是这样工作的 它只允许我们通过修复函数的第一个参数来部分应用函
  • 当基本词以 I 开头时,如何命名接口?

    我想为 Items 创建一个界面 通常 我会通过在基本词中添加 I 前缀来命名接口 但在这种情况下 我的基本词已经以 I 开头 以下是我的一些想法 IItem 两个我 Iitem 情况不同 项目接口 跳过I前缀 写出Interface 什么
  • Java静态方法的优缺点

    我以前没有使用过很多静态方法 但最近我倾向于使用更多静态方法 例如 如果我想在类中设置一个布尔标志 或者访问一个类而不需要通过类传递实际对象 例如 public class MainLoop private static volatile
  • rabbitmq-erlang-client,使用 rebar 友好的 pkg,在开发环境上工作在 rebar 版本上失败

    我成功地将rabbitmq erlang client的rebar友好包用于一个简单的Hello World rebarized和OTP 兼容 应用程序 并且在开发环境中工作正常 我能够启动 erl 控制台并执行我的操作applicatio
  • MemberwiseClone 相当于现有对象吗?

    这里有很多关于 MemberwiseClone 的问题 但我找不到任何准确的内容 据我了解 MemberwiseClone 基本上只是复制对象的内存区域 将其转储到其他地方 然后将其称为该对象的新实例 显然非常快 对于大型对象来说 这是制作
  • 使用 .NET Core 3.1 sdk 时,有没有办法限制 .NET Core 项目仅生成 .dll 作为输出文件

    当我使用 NET Core 3 1 sdk 构建 NET Core 控制台应用程序时 它会生成 exe 和 dll 作为输出 当我使用 NET Core 2 1 时 它仅生成 dll 作为输出 有没有办法限制 NET Core 3 1 sd
  • 创建一个排除某些文件的补丁文件

    我想创建一个补丁文件 仅将某些文件从 dir2 修补到 dir1 两者都是同一项目的 git 存储库 但是 dir2 包含第一个版本的高度修改版本 我只想修补对某些文件所做的更改 dir2 还具有 dir1 没有的额外文件 主要是 dir1
  • 在 Ubuntu WSL2 上连接到本地主机的问题

    我在本地为 django 项目设置了 Apache2 服务器 并且运行得非常好 问题是 休息一天后我回到它并尝试连接到服务器 但不知何故我无法连接到它 即使在检查 apache 服务是否正在运行并重新加载配置以确保确定之后也是如此 我无法从
  • 在 Firefox 或我的代理中禁用 websocket

    我已将 Firefox 配置为使用我的 http 和 https 代理 是的 我自己编写代理代码 因此我可以完全控制代理 您可能知道 无法再通过 about config 在 Firefox 中禁用 WebSocket 我正在寻找一种轻量级
  • C# 参数中的键值对

    我正在寻找一种方法来实现以下功能 myFunction Key value Key2 value 我确信匿名类型的某些东西会非常简单 但我没有看到它 我能想到的唯一解决方案是params KeyValuePair