C#中是否有一些类似字符串的类,并允许我存储某些字符/单词的自定义元数据(标签)?
例如,对于字符串Example string
,我可能想要添加大写字母E
大写字母的信息,我可能想添加一些字母的类型(比如说) vocals )。然后我可能想在字符串上调用.Replace
或.Trim
,我需要结果仍然包含序列中未更改字母的'tags'。
在C#/ .NET中是否可以这样,而不必自己编写所有逻辑?
答案 0 :(得分:1)
“有什么内置”的答案是否定的。
但是,您可以创建自己的类来处理所需的任何元数据信息结构,并将string
值公开为内部属性。您也可以使用它来覆盖ToString()
方法。通过这种方式,您将能够传递您的对象并仍使用其string
等效对象。
通过重载运算符,您还可以对常规string
实例进行转换和比较。
答案 1 :(得分:1)
只是为了它的乐趣!
快速运行:
Language C# Program
void Main()
{
string str = "Example, string";
var output = Explain(str);
OutputExplanation(output);
}
private void OutputExplanation(List<LetterExplanation> input)
{
StringBuilder sb = new StringBuilder();
foreach(var ltr in input)
sb.AppendFormat("The letter {0} is {1}\n", ltr.Letter, ltr.Type);
sb.ToString().Dump();
}
private List<LetterExplanation> Explain(string input)
{
var sb = new List<LetterExplanation>();
foreach(char c in input.ToCharArray())
{
//c.Dump();
LetterType type = LetterType.Character;
// vowel, consonant or special
if("aeiou".IndexOf(c.ToString(), StringComparison.InvariantCultureIgnoreCase) >= 0)
type |= LetterType.Vowel;
else if(" ,.-_<>/\\".IndexOf(c.ToString(), StringComparison.InvariantCultureIgnoreCase) >= 0)
type |= LetterType.Special;
else
type |= LetterType.Consonant;
// uppercase or lowercase
if(char.IsUpper(c) && (type & LetterType.Special) != LetterType.Special)
type |= LetterType.Uppercase;
else if((type & LetterType.Special) != LetterType.Special)
type |= LetterType.Lowercase;
// add
sb.Add(new LetterExplanation() { Letter = c, Type = type });
}
return sb;
}
[Flags]
public enum LetterType {
Vowel = 1, Consonant = 1 << 1, Uppercase = 1 << 2, Lowercase = 1 << 3, Number = 1 << 4, Special = 1 << 5, Character = 1 << 6
}
public class LetterExplanation
{
public char Letter { get; set; }
public LetterType Type { get; set; }
}
您的输出结果为:
The letter E is Vowel, Uppercase, Character
The letter x is Consonant, Lowercase, Character
The letter a is Vowel, Lowercase, Character
The letter m is Consonant, Lowercase, Character
The letter p is Consonant, Lowercase, Character
The letter l is Consonant, Lowercase, Character
The letter e is Vowel, Lowercase, Character
The letter , is Special, Character
The letter is Special, Character
The letter s is Consonant, Lowercase, Character
The letter t is Consonant, Lowercase, Character
The letter r is Consonant, Lowercase, Character
The letter i is Vowel, Lowercase, Character
The letter n is Consonant, Lowercase, Character
The letter g is Consonant, Lowercase, Character