我有一个字符串列表,这些字符串是方法的有效输入。字符串列表相当长,可能会存储在数据库中(但不是100%必需的-可以存储在资源文件中)。我希望在理想的情况下,验证传递给方法的字符串是否有效,有点像枚举。我不想创建枚举,因为输入列表将通过调用另一个系统来生成。我希望能够通过更新数据库或资源文件来自动生成输入。
// Magic String
public void Test()
{
var result = DoSomething("myFieldName");
}
// would like myFieldName to be some sort of intellesence
public void Test()
{
var result = DoSomething(myFieldName);
}
public string DoSomething(string input)
{
return $"Hello {input}";
}
我希望避免传递魔法字符串,因为可能会有100+值,而开发人员将无法记住所有可能的输入。
谢谢!
发布于 2020-11-19 16:16:21
一种方法是创建一个类,该类具有从数据源(可以是app.config、数据库或其他数据存储)返回值的静态只读属性。
在本例中,我使用了以下app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="SomePropertyName" value="Some Property Value" />
<add key="MyFieldName" value="Another value" />
</appSettings>
</configuration>
接下来,我们可以创建一个类,该类具有表示配置中的键的属性,该属性值将从配置文件中提取。下面的示例类有一个私有方法,它将从配置中返回值(但用从数据库中查找值的方法替换该方法将非常容易):
public static class ConfigKeys
{
// Get-only properties that the developer can access
public static string MyFieldName => GetString("MyFieldName");
public static string AnotherFieldName => GetString("SomePropertyName");
// Returns the actual string from the data source (app.config, database, etc)
private static string GetString(string propertyName)
{
return ConfigurationManager.AppSettings.Get(propertyName);
}
}
然后从开发人员的角度来看,他们所要做的就是:
public static void Main()
{
DoSomething(ConfigKeys.MyFieldName);
// rest of code omitted
}
https://stackoverflow.com/questions/64906750
复制相似问题