C# 构建一个字符串,评估另一个字符串作为模板/规则/格式来执行它

标签 c# string string-concatenation

<分区>

我正在考虑根据用户所属的类别构建某种用户名的应用程序。当我尝试从表中包含的规则生成此用户名时,问题就开始了。

例子:

数据数据表

| 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;

抱歉,如果我解释得不够好,但这对我来说是一件棘手的事情。

最佳答案

我会尝试利用 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? .

关于C# 构建一个字符串,评估另一个字符串作为模板/规则/格式来执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37706192/

相关文章:

c# - 当用户使用数据时,在 SQL 中锁定行的正确方法是什么?

c# - ABCpdf 只渲染第一页

linux - 如何在 Linux 中返回多个文件中的字符串计数

java - 加法运算符 (+) 执行串联而不是加法

c# - 两次 Socket.BeginReceive 调用之间的 TCP 数据包会发生什么情况?

C# UDP 现有连接被远程主机强行关闭

c# - 不是所有的代码路径都通过 C# 编译器返回值

Java : Searching Ids from hashset or String

mysql - 如何连接两个列值并存储在另一列 mysql php

Java 8 : Class. getName() 减慢字符串连接链速度