我刚宣布
public static class DefaultComparers
{
public readonly IComparer TextComparer = new TextComparer(new CompositeIndexedComparer<string>());
private static IDictionary<string, IComparer> DefaultComparers()
{
return new Dictionary<string, IComparer>(StringComparer.InvariantCultureIgnoreCase) {
{"txt", TextComparer}
};
}
}
然而,在同一名称空间中已经是一个名为TextComparer
的类,因此DefaultComparers
方法不会编译。如果它是一种非静态方法,我可以使用this.TextComparer
轻松修复它。静态上下文中的替代方法是什么?
答案 0 :(得分:6)
此方法的名称与您的类相同,但不能,编译器将其视为您的类的构造函数,因此它不应该具有返回类型
private static IDictionary<string, IComparer> DefaultComparers()
{
return new Dictionary<string, IComparer>(StringComparer.InvariantCultureIgnoreCase) {
{"txt", TextComparer}
};
}
答案 1 :(得分:1)
你的问题似乎是基于错误的前提。您的代码还有其他几个问题,但您要求的问题是不存在的。这完美编译:
class ConflictName
{
}
class GoodName
{
static object ConflictName = new ConflictName();
static Dictionary<string, object> ANOTHERGoodName()
{
return new Dictionary<string, object>
{
{ "txt", ConflictName }
};
}
}
编译器知道 类型 (class ConflictName
)和 值 之间的区别(第二类内的字段ConflictName
)。
但是,在其他情况下,需要限定static
成员(例如,因为它被同一方法中定义的局部变量隐藏),您只需在类名,例如GoodName.ConflictName
而非ConflictName
。