【问题标题】:Constants best practices常量最佳实践
【发布时间】:2016-03-16 11:14:35
【问题描述】:

我有一个用字典值初始化的简单类,可以将其值作为字典返回,这是一个示例:

public class ApartmentModel
{
    public int Id { get; set; }

    public string Title { get; set; }

    public ApartmentModel()
    {
    }

    public ApartmentModel(IDictionary<string, object> item)
    {
        Id = (int)item["ID"];
        Title = item["Title"].ToString();           
    }

    public override IDictionary<string, object> FieldsValues()
    {
        var item = new Dictionary<string, object>
        {
            ["ID"] = Id,
            ["Title"] = Title                
        };
        return item;
    }
}

有些类有公共字段,例如“Id”和“Title”。 我想知道将字典键字符串存储为常量的最佳做法是什么:与私有字段在同一类中或在设置/资源文件中?

【问题讨论】:

  • 取决于您的 kex 更改频率。如果仅在发布新软件时发生这种情况,请随意将其硬编码到您的代码中。但是,当您计划经常创建或删除新密钥时,请将其放入任何配置文件中。

标签: c# dictionary constants


【解决方案1】:

看起来您的常量值对应于属性名称。在这种情况下,最好不要使用字符串文字,而是用nameof 运算符代替(假设正在使用C# 6 语言)

public ApartmentModel(IDictionary<string, object> item)
{
    Id = (int)item[nameof(Id)];
    Title = item[nameof(Title)].ToString();           
}

public override IDictionary<string, object> FieldsValues()
{
    var item = new Dictionary<string, object>
    {
        [nameof(Id)] = Id,
        [nameof(Title)] = Title                
    };
    return item;
}

更好的方法是不直接对这些方法进行编码,而是用基于反射和自定义属性的单一方法替换它们。定义一个属性,指定包含在FieldsValues 中的属性 - 生成IDIctionary,并编写一个辅助方法来遍历对象的类层次结构,查找具有自定义属性的所有属性,并根据它们生成/使用字典。

【讨论】:

  • 你的意思是用辅助方法创建某种静态类,并在 FieldsValues 中调用它来生成 IDictionaty?
  • @AlexanderSmith 正确,这就是我会采取的方法。
猜你喜欢
  • 2010-10-04
  • 2012-03-27
  • 2011-03-06
  • 2013-08-03
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多