Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
“什么类型的?”;新的{id=0}";在C#中?_C#_Oop - Fatal编程技术网

“什么类型的?”;新的{id=0}";在C#中?

“什么类型的?”;新的{id=0}";在C#中?,c#,oop,C#,Oop,我使用的是var abc=new{id=0}在我的C#代码中,而不知道它到底是什么类型 它仅仅被称为对象吗?它是一种特殊类型的对象吗 我想知道,因为我不知道如何向这种对象添加字段 快速示例: 我有var abc=new{id=0}我想添加到abc字段name=“david”它创建了一个名为id的匿名类对象。留意细节。一旦创建对象,它就无法扩展 这是使用.net Reflector打开此类时的外观 [CompilerGenerated, DebuggerDisplay(@"\{ id = {id}

我使用的是
var abc=new{id=0}在我的C#代码中,而不知道它到底是什么类型

它仅仅被称为对象吗?它是一种特殊类型的对象吗

我想知道,因为我不知道如何向这种对象添加字段

快速示例:
我有
var abc=new{id=0}
我想添加到
abc
字段
name=“david”
它创建了一个名为
id
的匿名类对象。留意细节。一旦创建对象,它就无法扩展

这是使用.net Reflector打开此类时的外观

[CompilerGenerated, DebuggerDisplay(@"\{ id = {id} }", Type="<Anonymous Type>")]
internal sealed class <>f__AnonymousType0<<id>j__TPar>
{
    // Fields
   [DebuggerBrowsable(DebuggerBrowsableState.Never)]
   private readonly <id>j__TPar <id>i__Field;

   // Methods
   [DebuggerHidden]
   public <>f__AnonymousType0(<id>j__TPar id);

   [DebuggerHidden]
   public override bool Equals(object value);

   [DebuggerHidden]
   public override int GetHashCode();

   [DebuggerHidden]
   public override string ToString();

   // Properties
  public <id>j__TPar id { get; }
}
[CompilerGenerated,DebuggerDisplay(@“\{id={id}}”,Type=”“)]
内部密封类f__匿名类型0
{
//田地
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
专用只读j_u_uTPAR i_u_u字段;
//方法
[调试程序隐藏]
公共f___匿名类型0(j__TPar id);
[调试程序隐藏]
公共覆盖布尔等于(对象值);
[调试程序隐藏]
公共覆盖int GetHashCode();
[调试程序隐藏]
公共重写字符串ToString();
//性质
公共j__TPar id{get;}
}
因此,它被编译为常规类。基本的区别是,它不能在方法范围之外使用。

它是一个,也就是说,它没有可以在代码中使用的类型(尽管编译器生成了一个)

MSDN说:

类型名由编译器生成,在源代码级别不可用

如果要添加属性,只需执行以下操作:

var abc = new { id = 0, name = "david" };

我只能猜测,但可能是因为它不是真的正确。它确实有一个显式类型,只是类型是由编译器创建的,没有名称(编译器内部除外)。