Ниже приведен минимальный код. пример сначала на C#, а затем на VB:
Код: Выделить всё
Graph g = new Graph();
g.LoadFromEmbeddedResource("VDS.RDF.Configuration.configuration.ttl");
foreach (Triple t in g.Triples)
{
Console.WriteLine(t.Subject.ToString());
}
Код: Выделить всё
Dim g As Graph = New Graph()
g.LoadFromEmbeddedResource("VDS.RDF.Configuration.configuration.ttl")
For Each t As Triple In g.Triples
Console.WriteLine(t.Subject.ToString())
Next
Не удалось разрешить перегрузку потому что ни один
доступный 'ToString' не принимает это
количество аргументов.
Похоже, это связано с тот факт, что тип свойства t.Subject, которое я пытаюсь записать в консоль, явно определил методы ToString(), которые принимают параметры. Компилятор VB, похоже, ожидает использования одного из них и, похоже, не выполняет неявное приведение к Object и не использует стандартный метод Object.ToString(), тогда как компилятор C# это делает.
Есть ли какой-нибудь способ обойти это, например. параметр компилятора VB, или лучше просто убедиться, что тип свойства (которое в этом примере является интерфейсом) явно определяет непараметризованный метод ToString(), чтобы обеспечить совместимость с VB?
Изменить
Вот дополнительные сведения, запрошенные Люцианом
- Graph — это реализация интерфейса, но на самом деле это не имеет значения, поскольку проблема заключается в интерфейсе INode, тип которого возвращает t.Subject.
INode определяет две перегрузки для ToString(), обе из которых принимают параметры - Да, это ошибка времени компиляции
- Нет, я не использую скрыть по имени, весь API написан на C#, поэтому я не смог бы создать такой API, даже если бы захотел
Подробнее здесь: https://stackoverflow.com/questions/561 ... -to-object
Мобильная версия