2

型と同じ名前のローカル変数がある場合、指定したシンボルが型または変数であることをコンパイラに伝える方法はありますか? たとえば、次のことを考慮してください (すべての型戻りエラーを無視します)。

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">

「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);
    }
}

しかし、これは前述の問題によりコンパイルされません。

4

2 に答える 2

5

型の名前空間を完全修飾する必要があります。

型に名前空間がない場合は、global::(とにかく C# で) プレフィックスを付けることができます。

于 2009-10-06T13:07:48.413 に答える
2

この動作の詳細については、C# 仕様を参照してください。それを説明する章の冒頭は次のとおりです。

7.3 メンバー検索
メンバー ルックアップは、型のコンテキストにおける名前の意味を決定するプロセスです。メンバー ルックアップは、式の単純名 (§7.5.2) またはメンバー アクセス (§7.5.4) の評価の一部として発生する可能性があります。simple-name または member-access が呼び出し式 (§7.5.5.1) の simple-expression として発生する場合、メンバーは呼び出されたと言われます。メンバーがメソッドまたはイベントである場合、またはデリゲート型 (§15) の定数、フィールド、またはプロパティである場合、そのメンバーは呼び出し可能であると言われます。メンバー検索では、メンバーの名前だけでなく、メンバーが持つ型パラメーターの数と、メンバーにアクセスできるかどうかも考慮されます。メンバー検索の目的で、

于 2009-10-06T13:09:45.573 に答える