一个更好的别名列表?

时间:2017-11-08 01:00:43

标签: c# list alias

我们有一个管理通用物理资源的系统。有超过500个人资源。该系统用于许多不同的事情,并使软件更容易编写我们使用别名。

例如,物理资源TG67I9的别名是" RightDoor"。编写代码时,使用RightDoor代替TG67I9,使代码更具可读性。此别名列表作为文本文件加载,并引用资源及其别名。该系统使用数百个不同的别名列表来引用相同的物理资源。

这种类型的设置有两个主要缺点。首先,当使用别名调用资源时,它们将作为字符串传递。 Door.Open(" RightDoor")例如。这并没有提供任何工具提示或智能,使代码更难编写。它基本上需要不断引用别名列表。是RightDoor还是Right_Door还是右门还是......你明白了。第二个是在执行之前没有参数验证。所有编译器都知道传入一个字符串然后它很高兴。只有在代码运行时,该函数才会尝试通过别名访问资源并失败,因为它无法找到右门,因为它应该是RightDoor。显示错误。这需要繁琐的调试并反复运行代码以清除任何坏的别名。

有更好的方法吗?这样,别名列表可以通过物理资源与其别名的交叉引用来制作,并且在列表之后可以显示工具提示可以显示资源。 (假设可以从头开始编写新系统)

我使用最新的.NET与VisualStudio 2017和C#编写代码。

2 个答案:

答案 0 :(得分:1)

最简单的方法很可能是“string enum”:

public class Resources {
    public const string 
        LeftDoor  = "TG67I8", 
        RightDoor = "TG67I9";
}

样品使用:

Door.Open(Resources.RightDoor);

将鼠标悬停在VS中的.RightDoor上会显示工具提示(constant) string Resources.RightDoor = "TG67I9"
右键单击.RightDoor并选择查找所有引用将显示变量的使用位置。

另一个选项可以是在Project Properties的Resources部分添加字符串,然后:

using YourProjectNameSpace.Properties;
...
Door.Open(Resources.RightDoor);

这有点慢,因为资源是在运行时检索的,但允许从与可执行文件分开的自定义外部文件加载资源。

答案 1 :(得分:1)

使用带常量的静态类。我已经做过很多次了同样的事情。加.NET does this as well

public static class PhysicalResources
{
    public const string One = "Uno";
    public const string Two = "Deux";
    // ...
}