C# 最佳做法

C# 最佳做法,c#,dictionary,constants,C#,Dictionary,Constants,我有一个简单的类,这些类使用字典值初始化,并可以将其值作为字典返回,下面是一个示例: public class ApartmentModel { public int Id { get; set; } public string Title { get; set; } public ApartmentModel() { } public ApartmentModel(IDictionary<string, object> item

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

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;
    }
}
公共类公寓模型
{
公共int Id{get;set;}
公共字符串标题{get;set;}
公共公寓模型()
{
}
公共公寓模型(IDictionary项)
{
Id=(int)项[“Id”];
Title=项目[“Title”]。ToString();
}
公共重写IDictionary字段值()
{
var item=新字典
{
[“ID”]=ID,
[“标题”]=标题
};
退货项目;
}
}
有些类有公共字段,如“Id”和“Title”。
我想知道将字典键字符串存储为常量的最佳做法是什么:在与私有字段相同的类中,或者在设置/资源文件中?

看起来常量的值与属性名相对应。在这种情况下,最好根本不使用字符串文本,用
nameof
运算符替换(假设使用的是C#6语言)

公共公寓模型(IDictionary项)
{
Id=(int)项[名称(Id)];
标题=项目[名称(标题)]。ToString();
}
公共重写IDictionary字段值()
{
var item=新字典
{
[nameof(Id)]=Id,
[姓名(头衔)]=头衔
};
退货项目;
}

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

取决于KEX的更改频率。如果只有在发布新软件时才会发生这种情况,请随意将其硬编码到代码中。但是,当您计划经常创建或删除新密钥时,请将其放入任何konfig文件中。您的意思是使用helper方法创建某种静态类,并在FieldsValue中调用它以生成IDictionaty吗?@AlexanderSmith正确,这是我将采取的方法。
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;
}