Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# console.writelines能否直接处理匿名对象?_C#_Console.writeline - Fatal编程技术网

C# console.writelines能否直接处理匿名对象?

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

我想弄明白为什么下面的“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 };
        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

这回答了你的问题吗?这回答了你的问题吗?