我有一个类来处理配置文件,我想整理代码以使其更具可读性和可维护性。在C ++中,我通常会使用typedef来执行此操作,但我发现有一种方法可以使用'using'关键字在C#中执行此操作(请参阅Equivalent of typedef in C#)。我唯一的问题是似乎没有办法嵌套这些。这就是我想要实现的目标:
using ConfigValue = System.Collections.Generic.List< System.String >;
using ConfigKey = System.String;
using ConfigSection = System.Collections.Generic.Dictionary< ConfigKey, ConfigValue >;
如果我更改ConfigKey或ConfigValue的类型并忘记更改ConfigSection,我怎样才能在不显示ConfigSection的情况下实现此目的?
由于
阿伦
答案 0 :(得分:3)
不幸的是,你无法做到这一点。 C / C ++中typedef的主要C#替代方法通常是类型推断,例如使用var
关键字,但在许多情况下仍然需要输入通用定义。几乎所有C#程序员都使用Visual Studio或其他IDE来保存他们在许多情况下输入所有内容的原因。
我不太推荐使用“using-as-typedef”模式,因为我希望它对大多数C#程序员来说都是不熟悉和令人惊讶的。此外,我认为你必须在每个文件中包含“psuedo-typedef”这一事实大大降低了它的实用性。
你可以考虑做的一件事当然是从你想要输入的东西中取出实际的类,例如像这样:
public class ConfigValue : List<string>
{
}
public class ConfigKey
{
private string s;
public ConfigKey(string s)
{
this.s = s;
}
// The implicit operators will allow you to write stuff like:
// ConfigKey c = "test";
// string s = c;
public static implicit operator string(ConfigKey c)
{
return c.s;
}
public static implicit operator ConfigKey(string s)
{
return new ConfigKey(s);
}
}
public class ConfigSection : Dictionary<ConfigKey, ConfigValue>
{
}
但这当然是矫枉过正,除非你还有其他理由想要制作具体的课程。
答案 1 :(得分:0)
您不能,using x = y
不应该用于创建类型别名。
它应该用于创建命名空间别名,以解决冲突(例如,命名空间和共享相同名称的类)。