fis*_*ead 15 c# string-formatting
我想指定格式的ToString格式,但我不确定处理这个的最佳方法.
例如,如果我有以下说明符
所以,如果我使用ToString这样的:
eqp.ToString("EE-EI (ED)")
Run Code Online (Sandbox Code Playgroud)
输出可能是:
"CAT994-61 (Front end loader)"
Run Code Online (Sandbox Code Playgroud)
最好的方法是搜索子串并进行令牌替换吗?有没有人有这样做的例子?
我正在做顺序string.Replace,这很好用.
public class Equipment
{
// (other class code)
public string ToString(string format)
{
string output = format;
output = output.Replace("EE", _EquipID);
output = output.Replace("ED", _EquipDescription);
output = output.Replace("DI", _DepartID);
return output;
}
public override string ToString()
{
return _EquipID;
}
}
Run Code Online (Sandbox Code Playgroud)
Ami*_*shk 15
结合字符串格式,并重载ToString你可以这样做:
public override string ToString(string myFormat)
{
myFormat = myFormat.Replace("EE", "{0}");
myFormat = myFormat.Replace("EI", "{1}");
myFormat = myFormat.Replace("ED", "{2}");
return String.Format(myFormat, this.equipment, this.description, this.id);
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用正则表达式来使Replace函数更好.
这可以使用如下:
oProd.ToString("EE,ED,EI");
oProd.ToString("EE-ED (EI)"); // change order
oProd.ToString("ED-EE,EE,EE (EI)"); // multiple times
oProd.ToString("ED:EI"); // have some missing
etc
Run Code Online (Sandbox Code Playgroud)
String.Format使您可以灵活地定位格式变量,例如,多次使用它们,或者删除一些.
首先覆盖ToString()
然后,如果您希望它是动态的,则必须一次解析格式字符串一个标记,并将相应的字符串添加到输出字符串.使用单字母格式说明符可以使它更简单,因为您可以一次解析一个字符.如果是特殊字符,则输出相应的数据,否则输出字符.
所以这样的事情
public override string ToString(string format)
{
StringBuilder s = new StringBuilder();
foreach (char c in format)
{
switch (c)
{
case 'E':
s.Append(EquipID);
break;
case 'D':
s.Append(EquipDesc);
break;
case 'I':
s.Append(DepartID);
break;
default:
s.Append(c);
break;
}
}
return s.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这在一次通过中具有相对较小的优点,这比多个字符串替换调用更有效.
| 归档时间: |
|
| 查看次数: |
5316 次 |
| 最近记录: |