加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 匿名类型

发布时间:2020-12-15 18:32:21 所属栏目:百科 来源:网络整理
导读:我有 Dictionary(TKey,TValue) 喜欢 Dictionaryint,ArrayList Deduction_Employees = new Dictionaryint,ArrayList(); 后来我在这个数组列表中添加了这样的匿名类型 var day_and_type = new { TheDay = myDay,EntranceOrExit = isEntranceDelay};Deduction_E
我有 Dictionary(TKey,TValue)喜欢
Dictionary<int,ArrayList> Deduction_Employees = 
    new Dictionary<int,ArrayList>();

后来我在这个数组列表中添加了这样的匿名类型

var day_and_type = new {
    TheDay = myDay,EntranceOrExit = isEntranceDelay
};

Deduction_Employees[Employee_ID].Add(day_and_type);

现在我如何取消打开var并访问这些属性?

解决方法

首先,您不是拆箱类型.匿名类型是引用类型,而不是结构.

即使你可以在技术上创建它们声明的方法之外的相同类型的实例(根据C#3.0语言规范的7.5.10.6节,其中规定:

Within the same program,two anonymous
object initializers that specify a
sequence of properties of the same
names and compile-time types in the
same order will produce instances of
the same anonymous type.

)您无法获取类型的名称,以便从Object执行转换回您创建的类型.你将不得不求助于一个本质上有缺陷的cast-by-example solution.

逐个示例是有缺陷的,因为从设计的角度来看,您想要在声明的函数外部访问类型的每个地方(并且仍然在同一个模块中),您必须再次有效地声明类型.

这是一种重复的努力,导致设计和实施的草率.

如果您使用的是.NET 4.0,则可以将对象实例放在动态变量中.但是,主要缺点是缺乏成员访问的编译时验证.您可能很容易拼错该成员的名称,然后您有一个运行时错误而不是编译时错误.

最终,如果您发现需要在声明的方法之外使用匿名类型,那么唯一的好方法是创建具体类型并将匿名类型替换为具体类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读