C# 希望某些变量之间存在相关性时的最佳实践

C# 希望某些变量之间存在相关性时的最佳实践,c#,C#,我在这里发布这个问题而不是软件工程SE,因为它听起来像是一个需要更多技术答案的问题。我之所以问这个问题,仅仅是因为在我编写代码的过程中,我一直担心自己的方式是否正确(换句话说,我的编码技术是否健康) 简单地说,这里是我在实现代码方法中某些值之间的相关性时制定的策略(参见示例了解我的意思): 1) 使用字典: class Example { private static Dictionary<Type, string> _types = new Dictionary<Ty

我在这里发布这个问题而不是软件工程SE,因为它听起来像是一个需要更多技术答案的问题。我之所以问这个问题,仅仅是因为在我编写代码的过程中,我一直担心自己的方式是否正确(换句话说,我的编码技术是否健康)

简单地说,这里是我在实现代码方法中某些值之间的相关性时制定的策略(参见示例了解我的意思):

1) 使用字典:

class Example
{
    private static Dictionary<Type, string> _types = new Dictionary<Type, string>()
    {
        { typeof(string), "string" },
        { typeof(Int32), "Int32" },
        { typeof(float), "float" }
    };

    public static string RetrieveTypeString(Type type)
    {
        return _types[type];
    }
}
根据项目的数量,它可以变得非常大,所以我通常避免这样做,但它对小集合很有用

4) 其他方法,例如使用替代集合而不是字典

  • 我的方法有什么不好的做法吗
  • 是否有更好的替代方案来避免在运行时填充内容而不使用外部存储
非常感谢您的建议

谢谢


编辑:我注意到这个问题的回答可能会因上下文的不同而有所不同,我想知道哪种方法是最好的:我编写了一些代码,其中,当文本框或其他控件标记有验证错误时,根据特定于控件的某些设置显示错误消息和其他图形元素,这意味着我必须将控件与其设置相关联。我通过创建一个类来解决这个问题,该类重新组合了我想要关联到控件的所有内容(我定义的设置),并创建了一个类级字典变量来关联我的类和控件。我还创建了第二个类级别的字典,将其中一个设置与另一个类相关联,该类将错误消息分组(我希望每个类实例都有多个错误消息)。这种方法可以接受,还是不推荐?

在我看来,它们都很合理

我不会为选项2使用列表-您不关心顺序或重复项,因此集合可能是更好的选择。我对C#一无所知,但我想查找速度也会更快

我总是优先考虑可读性,所以一开始我可能会选择switch语句。在我看来,这是格式化它的最佳方式:

switch (Type.GetTypeCode(type))
{
    case TypeCode.String: return "string";
    case TypeCode.Int32:  return "Int32";
    case TypeCode.Double: return "double";

    default:
        throw new Exception();
}

如果这是一个性能瓶颈,我会把它换成一组或一张地图。

eh,1)我认为这是一个问题。2) 我真的不确定你想做什么,那就是
对象。GetType()。Name
做不到“最佳实践”的问题通常被认为是离题的,而且在任何情况下,你基本上是在征求意见。答案是,这取决于。这完全取决于你想做什么以及如何访问它。@Amy是的,我知道这一点,但在这种情况下,它似乎不是主观的,这是一个可以有明确答案的问题(不是意见),例如,这里有一个更好的方法,因为X,Y,Z的原因。这就是我决定发布这篇帖子的原因。谢谢你,这也是我写这篇文章的原因之一,通过迭代一个集合来实现这一点似乎是错误的。嘿,你能澄清一下“集合”或“地图”是什么意思吗?你说的是数据集吗?地图似乎是一个C++的东西……雷纳托,它们是语言不可知论的概念。我对这个答案投了赞成票,因为它符合问题+1的规格。
class Example
{
    public string RetrieveTypeString(Type type)
    {
        switch (Type.GetTypeCode(type))
        {
            case TypeCode.String:
                return "string";

            case TypeCode.Int32:
                return "Int32";

            case TypeCode.Double:
                return "double";

            default:
                throw new Exception();
        }
    }
}
switch (Type.GetTypeCode(type))
{
    case TypeCode.String: return "string";
    case TypeCode.Int32:  return "Int32";
    case TypeCode.Double: return "double";

    default:
        throw new Exception();
}