匿名类型-有什么明显的特点吗?
有什么可用来确定类型是否实际上是匿名类型的东西吗?例如界面等?
目标是创建类似于以下内容的内容…
//defined like...public static T Get<T>(this IAnonymous obj, string prop) {
return (T)obj.GetType().GetProperty(prop).GetValue(obj, null);
}
//...
//And then used like...
var something = new { name = "John", age = 25 };
int age = something.Get<int>("age");
还是仅仅是匿名类型的美?没有什么可以自我识别的,因为它采用了新的形状?
-我意识到您可以为 类编写扩展方法,但是在我看来,这似乎有点过头了。
回答:
编辑:下面的列表适用于C#匿名类型。VB.NET具有不同的规则-
特别是,它可以生成可变的匿名类型(默认情况下会生成)。贾里德(Jared)在评论中指出,命名方式也有所不同。基本上,这一切都很脆弱…
您无法在一般约束中识别它,但是:
- 它将是一个类(而不是接口,枚举,结构等)
- 它将应用CompilerGeneratedAttribute
- 它将覆盖Equals,GetHashCode和ToString
- 它将在全局名称空间中
- 它不会嵌套在其他类型中
- 这将是内部的
- 将被密封
- 它将直接从
object
- 它将具有与属性一样多的类型参数。(您 可以 有一个没有属性的非泛型匿名类型。尽管如此,这毫无意义。)
- 每个属性将具有一个类型参数,其名称包括属性名称,并且将具有该类型参数,例如Name属性将成为类型<> _ Name的属性
- 每个属性都是公开且只读的
- 对于每个属性,将有一个对应的只读专用字段
- 将没有其他属性或字段
- 将有一个构造函数采用一个与每个类型参数相对应的参数,其顺序与类型参数相同
- 每个方法和属性都将应用DebuggerHiddenAttribute。
- 类型的名称将以“ <>”开头,并包含“ AnonymousType”
但是,规范对此几乎没有保证-因此在下一版本的编译器中,或者如果您使用Mono等,都可能会更改。
以上是 匿名类型-有什么明显的特点吗? 的全部内容, 来源链接: utcz.com/qa/415678.html