Компилятор VB не выполняет неявное приведение к объекту?C#

Место общения программистов C#
Ответить
Anonymous
 Компилятор VB не выполняет неявное приведение к объекту?

Сообщение Anonymous »

Недавно мне сообщили о странной проблеме с одним из моих API. По сути, по какой-то причине при использовании с кодом VB компилятор VB не выполняет неявное приведение к Object при попытке вызвать метод ToString().

Ниже приведен минимальный код. пример сначала на 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
Во втором примере VB выдается следующее исключение компилятора:


Не удалось разрешить перегрузку потому что ни один
доступный 'ToString' не принимает это
количество аргументов.


Похоже, это связано с тот факт, что тип свойства t.Subject, которое я пытаюсь записать в консоль, явно определил методы ToString(), которые принимают параметры. Компилятор VB, похоже, ожидает использования одного из них и, похоже, не выполняет неявное приведение к Object и не использует стандартный метод Object.ToString(), тогда как компилятор C# это делает.
Есть ли какой-нибудь способ обойти это, например. параметр компилятора VB, или лучше просто убедиться, что тип свойства (которое в этом примере является интерфейсом) явно определяет непараметризованный метод ToString(), чтобы обеспечить совместимость с VB?

Изменить

Вот дополнительные сведения, запрошенные Люцианом
  • Graph — это реализация интерфейса, но на самом деле это не имеет значения, поскольку проблема заключается в интерфейсе INode, тип которого возвращает t.Subject.

    INode определяет две перегрузки для ToString(), обе из которых принимают параметры
  • Да, это ошибка времени компиляции
  • Нет, я не использую скрыть по имени, весь API написан на C#, поэтому я не смог бы создать такой API, даже если бы захотел
Обратите внимание, что с тех пор я добавил в интерфейс явную непараметризованную перегрузку ToString(), которая устранила проблему для пользователей VB.

Подробнее здесь: https://stackoverflow.com/questions/561 ... -to-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»