你如何告诉C#编译器,当它们共享同一个名称时,它是一个类型而不是一个变量?

时间:2009-10-06 13:03:14

标签: c# .net linq-to-xsd

当你有一个名为与类型相同的局部变量时,有没有办法告诉编译器你给出的符号是一个类型还是一个变量?例如,考虑(并忽略所有类型的返回错误):

public class sometype { public static sometype DoSomething() {} }

public string sometype { get { return sometype.DoSomething(); } } //A
public string sometype { get { return sometype.Trim(); } } //B
public sometype sometype { get { return sometype.DoSomething(); } } //C
public sometype sometype { get { return sometype.Trim(); } } //D
  • A - >错误(没有方法DoSomething())
  • B - >作品
  • C - >作品
  • D - >错误(没有方法修剪())

从更具适用性的观点来看

(如果XSD让你胆怯,你可能想跳过这个):

我目前正在努力让LINQ到XSD工作。 在我的XSD文件中有xs:这样的元素:

<xs:element name="car" type="car">

'car'类型被定义为像这样的simpleType (可能还有一些限制,但实质上就是这样):

<xs:simpleType name="car">
 <xs:restriction base="xs:string" />
</xs:simpleType>

LINQ to XSD自然会产生如下代码:

public string car {
    get {
        XElement x = this.GetElement(XName.Get("car", ""));
        return XTypedServices.ParseValue<string>(x, XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String).Datatype);
    }
    set {
        this.SetElementWithValidation(XName.Get("car", ""), value, "car", car.TypeDefinition);
    }
}

但是由于上述问题,这将无法编译。

2 个答案:

答案 0 :(得分:5)

您应该完全限定该类型的命名空间。

如果类型没有命名空间,那么你可以在前面添加global::(无论如何都是C#)。

答案 1 :(得分:2)

您可以查看C#规范以获取有关此行为的更多信息。以下是描述它的章节的开头:

  

7.3会员查询
  成员查找是a的含义的过程   类型上下文中的名称是   决心。可以进行成员查找   作为评估简单名称的一部分   (§7.5.2)或成员访问(§7.5.4)   在表达中。如果是简单的名字   或成员访问发生   简单表达一个   invocation-expression(第7.5.5.1节),.   据说成员被援引。如果一个   成员是一种方法或事件,或者如果它   是一个恒定的,领域或属性的   委托类型(§15),然后是成员   据说是可以调用的。会员   查找不仅考虑名称   一个成员,但也是类型的数量   成员拥有的参数以及是否   会员可以访问。为了   成员查找的目的,通用   方法和嵌套泛型类型有   类型参数的数量   他们各自表示   声明和所有其他成员   没有类型参数。