簡體   English   中英

當它們共享相同的名稱時,如何告訴C#編譯器符號是類型而不是變量?

[英]How do you tell the C# compiler that a symbol is a type and not a variable when they share the same name?

當您擁有一個與類型相同的局部變量時,是否有任何辦法告訴編譯器您給定的符號是類型還是變量? 例如考慮(並忽略所有類型返回錯誤):

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->錯誤(無方法Trim())

從更實用的角度來看

(如果XSD讓您感到厭煩,則可以跳過此步驟):

我目前正在嘗試使LINQ to XSD工作。 在我的XSD文件中,有xs:elements像這樣:

<xs:element name="car" type="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);
    }
}

但這由於上述問題而無法編譯。

您應該完全限定類型的名稱空間。

如果類型沒有名稱空間,則可以在其前面加上global:: :(無論如何在C#中)。

您可以研究C#規范以獲取有關此行為的更多信息。 這是描述它的章節的開頭:

7.3會員查詢
成員查找是確定類型上下文中名稱含義的過程。 成員查找可以作為評估表達式中的簡單名稱(第7.5.2節)或成員訪問(第7.5.4節)的一部分而發生。 如果簡單名稱或成員訪問作為調用表達式的簡單表達式(第7.5.5.1節)發生,則稱該成員已被調用。 如果成員是方法或事件,或者它是委托類型的常量,字段或屬性(第15節),則該成員被稱為可調用的。 成員查找不僅考慮成員的名稱,還考慮該成員具有的類型參數的數量以及該成員是否可訪問。 為了成員查找的目的,泛型方法和嵌套的泛型類型在其各自的聲明中指定了類型參數的數量,而所有其他成員的類型參數均為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM