gpt4 book ai didi

c# - 如果匿名类型对象不可枚举,它如何转换为字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:43 25 4
gpt4 key购买 nike

假设我这样定义一个变量:

var o = new { RBI = 108, Name = "Roberto Alomar" };

我可以这样做:

Console.WriteLine("{0}", o);

但如果我尝试:

foreach (var i in o) {
Console.WriteLine("{0}", o[i]);
}

我得到一个错误:

foreach statement cannot operate on variables of type 'AnonymousType#1' because 'AnonymousType#1' does not contain a public definition for 'GetEnumerator'

那么它是如何工作的呢?我认为将对象转换为字符串的方法必须遍历所有属性才能完成任务。是否有某种特殊方法可以实现这种情况,还是我误解了它的工作原理?

最佳答案

How does it work under the hood? I'd think that a method for turning an object into a string would have to loop through all the properties to accomplish the task.

您的假设是 ToString 的实现在所有匿名类型的所有实例之间共享;例如,有一些助手在逻辑上类似于您在 JavaScript 中所做的事情:

var s = "";
for (property in this)
s += property + ":" + this[property];

这个假设是错误的;对于匿名类型,没有一个通用的 ToString 实现。相反,编译器 知道匿名方法的所有属性,因此它为每个 不同的匿名类型生成 ToString 的全新自定义实现。

在 C# 中,foreach 循环不会执行 for-in 循环在 JavaScript 中执行的操作。 C# 循环枚举集合的成员。 JS 循环枚举对象的属性

如果您想在 C# 中枚举对象的属性,您可以这样做,只是需要多做一些工作:

var s = "";
foreach (PropertyInfo propertyInfo in this.GetType().GetProperties())
s += propertyInfo.Name + ":" + propertyInfo.GetValue(this).ToString();

关于c# - 如果匿名类型对象不可枚举,它如何转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com