我正在寻找一种方法来获得如下功能:
myFunction({"Key", value}, {"Key2", value});
Run Code Online (Sandbox Code Playgroud)
我确定有一些匿名类型的东西很容易,但我没有看到它.
我能想到的唯一解决方案是使用"params KeyValuePair [] pairs"参数,但最终会出现类似于:
myFunction(new KeyValuePair<String, object>("Key", value),
new KeyValuePair<String, object>("Key2", value));
Run Code Online (Sandbox Code Playgroud)
诚然,这更加丑陋.
编辑:
为了澄清,我正在写一个"消息"类来传递两个不同的系统.它包含指定消息类型的ushort,以及与消息关联的"Data"的字符串到对象的字典.我希望能够在构造函数中传递所有这些信息,所以我能够这样做:
Agent.SendMessage(新消息(MessageTypes.SomethingHappened,"A",x,"B",y,"C",z)); 或类似的语法.
我正在实现一个系统,用于在我正在编写的程序的不同部分之间发送消息.有一些通用的消息类型以及一些特定于程序的每个部分.我想避免从每个类型的基本消息类派生中固有的层次结构腐烂,所以我将这种类型封装在int或ushort中.然后,我使用"Messages"命名空间集中不同的类型,并使用一堆常量集中静态类.但是,我遇到了必须维护每个不同部分的唯一编号列表的问题:
namespace Messages
{
public static class Generic
{
public const Int32 Unknown = 0;
public const Int32 Initialize = 1;
...
public const Int32 Destroy = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
其他地方
namespace Messages
{
public static class Graphics
{
public const Int32 Unknown = 0;
public const Int32 AddGraphic = 11; // <-- ?
}
}
Run Code Online (Sandbox Code Playgroud)
拥有那么随意的11似乎很难,特别是如果我有其中的几个,保持和更新以确保没有碰撞似乎是一种痛苦.是否有一个简单的解决方案,以确保每个参考都是独一无二的?我尝试使用静态只读,在静态构造函数中将它们从Unique.ID()函数初始化,但如果我这样做,我无法切换()传递的Message类型,因为它说"预期的常量类型"对于每个案例.