gpt4 book ai didi

c# - 匿名类型 - 是否有任何显着特征?

转载 作者:IT王子 更新时间:2023-10-29 04:18:06 25 4
gpt4 key购买 nike

有什么东西可以用来确定一个类型是否真的是匿名类型?比如接口(interface)等?

目标是创建类似下面的内容...

//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");

或者这只是匿名类型的优点?没有什么可以 self 识别的,因为它采用了新的形状?

注意 - 我知道您可以为 object 类编写一个扩展方法,但在我看来这似乎有点矫枉过正。

最佳答案

编辑:下面的列表适用于 C# 匿名类型。 VB.NET 有不同的规则——特别是,它可以生成可变的匿名类型(默认情况下)。 Jared 在评论中指出命名风格也不同。基本上这一切都非常脆弱......

您无法在通用约束中识别它,但是:

  • 它将是一个类(而不是接口(interface)、枚举、结构等)
  • 它将有 CompilerGeneratedAttribute应用于它
  • 它将覆盖 Equals、GetHashCode 和 ToString
  • 它将在全局命名空间中
  • 不会嵌套在其他类型
  • 这将是内部的
  • 它将被密封
  • 它将直接派生自object
  • 它将是通用的,具有与属性一样多的类型参数。 (您可以有一个没有属性的非通用匿名类型。不过这有点毫无意义。)
  • 每个属性都有一个类型参数,其名称包括属性名称,并且属于该类型参数,例如Name 属性成为 <>_Name
  • 类型的属性
  • 每个属性都是公开的和只读的
  • 对于每个属性,都会有一个对应的只读私有(private)字段
  • 不会有其他属性或字段
  • 将有一个构造函数接受一个参数对应于每个类型参数,其顺序与类型参数相同
  • 每个方法和属性都有 DebuggerHiddenAttribute应用于它。
  • 类型的名称将以“<>”开头并包含“AnonymousType”

然而,规范对此几乎没有任何保证——所以它可能会在下一个版本的编译器中发生变化,或者如果您使用 Mono 等。

关于c# - 匿名类型 - 是否有任何显着特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/315146/

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