【问题标题】:Access anonymous object property from static class c#从静态类 c# 访问匿名对象属性
【发布时间】:2016-12-31 05:31:11
【问题描述】:

我有一个包含多个匿名对象的静态类。每个对象都有不同数量的属性,但每个属性始终是已创建类的对象。

static public class Fields{
    static public Object FieldInfo1 = new {
        Customer = new FieldInformation("value1","value2")        
    } 

    static public Object FieldInfo2 = new {
        Customer = new FieldInformation("value1","value2"),
        Company = new FieldInformation("value1","value2"),        
    } 
}

我尝试在二等舱访问Fields.FieldInfo1.Customer(Program.cs,它是一个控制台应用程序)但它不起作用,我只得到Fields.FieldInfo1. 我做错了什么?

【问题讨论】:

  • .net 是一种类型安全的语言,因此您的代码需要具有类型意识,您无法访问 object 类型变量的属性,因为对象不包含名为 FieldInfo1 的属性.匿名类型在这里可能不是一个好主意,你想做什么以及为什么?
  • 它永远不会工作,因为 Fields.FieldInfo1 不包含公司属性,只有客户。
  • @MurrayFoxcroft 对不起,我的意思是客户

标签: c# anonymous-types anonymous-objects


【解决方案1】:

您需要将其转换为对象的类型。因为你没有(在编译时)演员as dynamic

var obj = Fields.FieldInfo1 as dynamic;
var value = obj.Customer.Prop1; // "value1"

但我不明白你为什么需要这样做。这不像 C#,它是一种强类型语言。在我看来,你应该重新考虑你的设计。

This 可能会为您提供一个合适的使用匿名类型的起点

【讨论】:

  • @Jauch - 我在发布之前执行了它,但它没有。 (我确实必须创建一个带有Prop1,Prop2FieldInformation 类才能使问题中的原始代码起作用)
  • 对不起@Gilad,我意识到我的错误。我尝试使用“Prop1”,但在我的代码中我使用了其他名称:)
  • @Jauch - 没问题 :)
  • 谢谢,但我想我真的应该重新考虑我的设计。
  • 标记为已回答 & 是的,我会带上字典。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 2014-10-15
  • 2018-04-07
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多