我正在考虑根据用户所属的类别构建某种用户名的应用程序。当我尝试从表中包含的规则生成此用户名时,问题就开始了。
示例:
| ID | Name | City | Level | Rule |
|----|-------|--------|--------|------|
| 1 | John | London | A | 1 |
| 2 | Chris | Paris | C | 1 |
| 3 | Anna | Madrid | B | 3 |
| 4 | Marie | Roma | C | 2 |
| Rule | Format |
|------|-----------------------------|
| 1 | "Name + City" |
| 2 | "Name[0] + City[0] + Level" |
| 3 | "Name[0] + \".\" + City" |
我想得到最终结果:
| ID | Username |
|----|------------|
| 1 | JonhLondon |
| 2 | ChrisParis |
| 3 | A.Madrid |
| 4 | MRC |
所以我在想是否有一个很好的方法可以使用规则表中包含的字符串构建用户名作为模板,如下所示:
string Name = dtData[i].Name;
string City = dtData[i].City;
string Level = dtData[i].Level;
string u = SomeGreatMethodToEvaluate(dtRules[dtData[i].Rule].Format);
dtFinal[i].Username = u;
对不起,如果我没有解释它已经足够好了,但这对我来说很棘手。
答案 0 :(得分:2)
我会尝试利用String.Format
来做到这一点。您可以将格式字符串存储在数据库中,并以一致的方式传入参数,例如姓名,城市,等级,规则。类似"Name + City"
的模式变得非常简单,它只需要格式字符串"{0}{1}"
。
String.Format
不支持开箱即用Strings
部分,但您可以使用IFormatProvider
和自定义类扩展其功能以包装字符串。相关问题中有很好的指示:Can maximum number of characters be defined in C# format strings like in C printf?。
答案 1 :(得分:0)
DotLiquid,这是一个模板引擎,可以很好地适应这里。使用DotLiquid,您的规则基本上成为模板,然后您可以将数据输入到模板中,从而产生所需的结果:
1. {{ name }}{{ city }}
2. {{ name | first | upcase }}{{ city | first | upcase }}{{ level }}
3. {{ name | first | upcase }}.{{ city }}
答案 2 :(得分:0)