C# console.writelines能否直接处理匿名对象?
我想弄明白为什么下面的“Console.WriteLine(x)”可以直接打印匿名对象的对象C# console.writelines能否直接处理匿名对象?,c#,console.writeline,C#,Console.writeline,我想弄明白为什么下面的“Console.WriteLine(x)”可以直接打印匿名对象的对象 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class program { static void Main() { var groupA = new[] { 3, 4, 5, 6
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class program
{
static void Main()
{
var groupA = new[] { 3, 4, 5, 6 };
var groupB = new[] { 6, 7, 8, 9 };
var someInts = from a in groupA
from b in groupB
where a > 4 && b <= 8
select new { a, b, sum = a + b }; // object of Anonymous tyoe
foreach (var x in someInts)
Console.WriteLine(x); // ok
// Console.WriteLine(groupA); // nok
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
班级计划
{
静态void Main()
{
var-groupA=new[]{3,4,5,6};
var-groupB=new[]{6,7,8,9};
var someInts=来自a组中的a
来自b组中的b
其中a>4&&b使用一个只显示属性的ToString()
方法创建了一个匿名类
ToString()
由WriteLine()
和许多其他方法隐式调用
对于数组,ToString()
仍在被调用,但它没有被覆盖,因此只给出完全限定名的默认文本
您不希望数组自动显示,因为它可能包含数百万项。对于匿名类型,这不太可能(尽管可能)。使用只显示属性的ToString()
方法创建匿名类
ToString()
由WriteLine()
和许多其他方法隐式调用
对于数组,ToString()
仍在被调用,但它没有被覆盖,因此只给出完全限定名的默认文本
您不希望数组自动显示,因为它可能包含数百万项。对于匿名类型,这不太可能(尽管可能)。匿名类与任何其他类一样,只是它是隐式的。这意味着它(与任何其他类一样)可以包含属性或成员,在您的例子中,整数是其内部的一部分
Console.WriteLine(x); // makes sense. x is just an integer
理论上,如果您使用任何显式类并计算它的.ToString()
,您将得到它的名称。因此,理论上,如果您使用groupA.ToString()
,您应该得到“匿名.abjdhjNxx1
”或者随便什么。实际上,你可以中断这一行,并在groupA变量中添加一个表来查看它。它仍然只是一个变量,并且仍然是类型安全的,你永远不知道“名称”是什么您的类型将是,因为运行时中间环境会随时间而变化。但是,正如这里所暗示的,它是gibrish,所以Microsoft的好人决定不直接向我们展示它。这就是为什么
Console.WriteLine(groupA); // not ok
如果你愿意,你仍然可以这样做
Console.WriteLine(groupA.GetType().Name);
但我无法想象你为什么要这样做,因为正如前面所说的,匿名类和其他任何类一样,只是它是隐式的。这意味着它(和其他任何类一样)可以包含属性或成员,在你的例子中,整数是其内部的一部分。所以
Console.WriteLine(x); // makes sense. x is just an integer
理论上,如果您使用任何显式类并计算它的.ToString()
,您将得到它的名称。因此,理论上,如果您使用groupA.ToString()
,您应该得到“匿名.abjdhjNxx1
”或者随便什么。实际上,你可以中断这一行,并在groupA变量中添加一个表来查看它。它仍然只是一个变量,并且仍然是类型安全的,你永远不知道“名称”是什么您的类型将是,因为运行时中间环境会随时间而变化。但是,正如这里所暗示的,它是gibrish,所以Microsoft的好人决定不直接向我们展示它。这就是为什么
Console.WriteLine(groupA); // not ok
如果你愿意,你仍然可以这样做
Console.WriteLine(groupA.GetType().Name);
但我无法想象你为什么要这么做,因为正如前面所说的,这是gibrish这回答了你的问题吗?这回答了你的问题吗?