有没有一种方法可以识别C#匿名类型?

有没有一种方法可以识别C#匿名类型?,c#,types,anonymous,C#,Types,Anonymous,比如说 var hello = new { Hello = "Hello" }; var world = new { World = "World" }; var helloWorld = hello + world; Console.WriteLine(helloWorld.ToString()); //outputs {Hello = Hello, World = World} 有什么办法可以让它工作吗?没有。hello和world对象是不同类别的对象 合并这些类的唯一方法是使用动态类型生

比如说

var hello = new { Hello = "Hello" };
var world = new { World = "World" };
var helloWorld = hello + world;
Console.WriteLine(helloWorld.ToString());
//outputs {Hello = Hello, World = World}

有什么办法可以让它工作吗?

没有。hello和world对象是不同类别的对象

合并这些类的唯一方法是使用动态类型生成()。以下是此类连接的示例:

引用上述文章:

这个过程是这样的:第一次使用 System.ComponentModel.GetProperties到 获取PropertyDescriptorCollection 从匿名类型。点燃 反射。发射以创建新的 动态组装和使用TypeBuilder 创建一个新类型,该类型是 综合所有属性 卷入的然后将新类型缓存到 重复使用,这样您就不必使用 每年建造这种新型建筑的成功案例 你需要它的时候到了


否-它们是不同的类型,并且这两种类型上的
+
运算符未定义

作为旁注:我不认为你的意思是连接。在C#中,连接是指对两个或多个
IEnumeration
s执行的操作,将它们“端到端”。例如,Linq方法
Concat()
String.Concat()
(字符串是字符的“集合”)。您在问题中描述的更像是两个不相关类型之间的连接或多重继承。除了在下面的备选方案中使用自治类型之外,我想不出与C#中类似的东西:

var hello = new { Hello = "Hello" };
var world = new { World = "World" };
var helloWorld = new { hello, world };
Console.WriteLine(helloWorld.ToString());
//outputs { hello = { Hello = Hello }, world = { World = World } }
您可以编写一个使用反射API自动执行此操作的方法。这是我所能看到的最接近的

var hello = new { Hello = "Hello" };
var world = new { World = "World" };
var z = new { x = hello, y = world };

将它直接传递给json序列化程序和viola。

我敢说,如果您需要为这类事情执行所有这些操作,您使用的匿名类型是错误的。我必须同意Lasse的说法。虽然这可能是一个有趣的解决办法,但它不是一个合理的解决方案。谢谢你让我知道这是不可能的。大图…,你想做什么?我正在使用ASP.Net MVC,并且发现使用如下内容以Json格式呈现匿名对象非常容易:var posts=postService.GetPersonalPosts(1,10,UserId);返回Json(posts,JsonRequestBehavior.AllowGet);我想知道是否有一种方法可以很容易地将两个匿名类型的属性合并为一个;每个都有自己的成员“集合”。
var hello = new { Hello = "Hello" };
var world = new { World = "World" };
var z = new { x = hello, y = world };