以编程方式生成属性

Joh*_*nny 10 c# properties

我想加载一个属性文件(它是一个.csv文件,每行都有一个名称和相关的数值),然后访问这些属性值,如下所示:FileLoader.PropertyOneFileLoader.PropertyTwo.问题是我不想为每个值写一个属性,我希望它们是从文件生成的.所以

public class FileLoader
{
    public int Property1 { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

不是我想要的.这可能吗?我看不到任何方法,因为显然编译器不会知道属性名称.也许类似的东西?

Dyn*_*ard 15

在C#4.0中,您可以使用ExpandoObject,链接包含很好的解释和一些用例,例如:

dynamic contact = new ExpandoObject();
contact.Name = "Patrick Hines";
contact.Phone = "206-555-0144";
contact.Address = new ExpandoObject();
contact.Address.Street = "123 Main St";
contact.Address.City = "Mercer Island";
contact.Address.State = "WA";
contact.Address.Postal = "68402";
Run Code Online (Sandbox Code Playgroud)

虽然ExpandoObject的强大功能是动态创建复杂的分层对象,但我认为即使对于简单的动态定义对象,您也可以使用它来获得闪亮的语法.

编辑:这是关于SO的另一个答案,由编写之前链接的文章的同一专栏作者添加有关ExpandoObject的好处的详细信息

ExpandoObject的真正好处是什么?

  • 在我看来,这是说明为什么动态是一个坏主意的案例之一.没有智能感知,没有类型安全,没有编译时检查,运行时异常 - 我认为代码生成会好很多. (5认同)