Как вы говорите компилятору C #, что символ - это тип, а не переменная, если они имеют одно и то же имя? - PullRequest
2 голосов
/ 06 октября 2009

Если у вас есть локальная переменная с именем, совпадающим с типом, есть ли способ сообщить компилятору, что указанный вами символ является типом или переменной? Например, рассмотрим (и игнорируем все ошибки возврата типа):

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: *: 1018 *

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

Где тип 'car' определяется как простой тип, подобный этому
(возможно, еще некоторые ограничения, но это по сути):

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

5 голосов
/ 06 октября 2009

Вы должны полностью определить пространство имен типа.

Если тип не имеет пространства имен, вы можете добавить к нему префикс global:: (в любом случае в C #).

2 голосов
/ 06 октября 2009

Вы можете посмотреть в спецификации C #, чтобы получить больше информации об этом поведении. Вот начало главы, которая описывает это:

7.3 Поиск члена
Поиск члена - это процесс, посредством которого значение имя в контексте типа определяется. Поиск члена может произойти как часть оценки простого имени (§7.5.2) или членский доступ (§7.5.4) в выражении. Если простое имя или членский доступ происходит как простое выражение выражение-вызов (§7.5.5.1), участник, как говорят, вызван. Если Член является методом или событием, или если это является константой, полем или свойством тип делегата (§15), затем член называется неприкосновенным. член поиск учитывает не только имя член, но и номер типа параметры, которые член имеет и является ли член доступен. Для цели поиска членов, общие методы и вложенные универсальные типы имеют количество параметров типа указано в их соответствующих декларации и все остальные члены имеют нулевые параметры типа.

...