c# - 方法参数智能
问题描述
我有一个字符串列表,这些字符串是方法的有效输入。字符串列表很长,可能会存储在数据库中(但不是 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 多个值,并且开发人员将无法记住所有可能的输入。
谢谢!
解决方案
一种方法是创建一个类,该类具有从数据源(可能是 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
}
推荐阅读
- google-cloud-platform - 如何将 GCP VM 中的文件保存到本地目录
- sql - BigQuery SQL 查询中的动态列名
- java - 无法使用传出 webhook 检索松弛消息
- c# - 如何在 Caliburn.Micro 中读取 app.config appSettings 与 DI 一起使用
- css - 使用滤镜时图像右侧的垂直线:blur()
- excel - 如果指定字符串下方的单元格为空,则删除工作表
- mysql - 如何在 MySQL 中获取具有最大值字段的行数据?
- python - 但是,使用 balltree 返回最近的距离,只选择了一个特定位置
- forms - 如何同步表单和 useState 对象?
- javafx-8 - 如何使用循环用数组填充 javafx 线图?