从静态类中访问匿名对象属性的方法(C#)

3
我有一个静态类,其中包含多个匿名对象。每个对象具有不同数量的属性,但每个属性总是创建类的对象。
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"),        
    } 
}

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


1
.NET是一种类型安全的语言,因此您的代码需要具备类型意识。如果变量的类型为“object”,则无法访问其属性,因为“object”不包含名为“FieldInfo1”的属性。在这里使用匿名类型可能不是一个好主意,您想要做什么以及为什么? - Charleh
它永远不会工作,因为Fields.FieldInfo1中没有包含Company属性,只有Customer。 - Murray Foxcroft
@MurrayFoxcroft 对不起,我的错,我是指客户。 - dev.Manderson
1个回答

4
你需要将其转换为对象类型。因为你在编译时使用了非 (as dynamic) 转换:
var obj = Fields.FieldInfo1 as dynamic;
var value = obj.Customer.Prop1; // "value1"

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

这篇文章或许可以为您提供匿名类型使用的起点。


@Jauch - 我在发布之前执行了它,结果没有成功。(我必须创建一个具有Prop1,Prop2FieldInformation类,才能使原始问题中的代码工作) - Gilad Green
抱歉 @Gilad,我意识到了我的错误。我尝试使用“Prop1”,但在我的代码中我使用了其他名称 :) - Jauch
@Jauch - 没问题 :) - Gilad Green
谢谢,但我想我应该重新考虑我的设计。 - dev.Manderson
@dev.Manderson - 或许将其作为字典会更好。而在我看来,更好的方式是不要将其作为静态的,而只需将其传递给需要它的类(查找依赖注入)。 - Gilad Green
1
标记为已回答,并且是的,我会使用字典。再次感谢! - dev.Manderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接