Как вызвать метод, написанный на VB.NET, из C# с необязательными аргументами

У меня есть метод, написанный на VB.NET. Это выглядит так:

Shared Sub SomeMethod(ByVal Id As Guid, 
                      Optional ByVal str1 As String = "foo", 
                      Optional ByVal str2 As String = "")

Я хочу вызвать этот метод из C# 3.0, и я хочу, чтобы он использовал аргументы по умолчанию. Я пытался передать System.Reflection.Missing.Value, но не могу использовать его как строку.

Есть ли способ сделать это?

Заранее спасибо за помощь.


person empi    schedule 03.03.2010    source источник


Ответы (3)


Нет, в C#3 вам просто нужно передать все параметры. C#4 будет иметь необязательные и именованные параметры.

Конечно, вы можете создать несколько перегруженных вариаций, но это только приближение.

person Henk Holterman    schedule 03.03.2010
comment
+1. В любом случае это именно то, что делает компилятор VB.Net - он просто автоматически вставляет значения по умолчанию для любых отсутствующих значений при компиляции вызывающей программы. - person MarkJ; 03.03.2010
comment
@MarkJ, да, но в Fx4 необязательные значения также находятся в метаданных, я только что проверил с VS2010. C# прекрасно использует значения opt из VB. - person Henk Holterman; 03.03.2010

Без использования C# 4.0 (который добавляет поддержку необязательных параметров) вы не можете их использовать; если вы запустите свой код через FxCop, вы увидите необязательные параметры, специально отмеченные для их невозможности использования C#.

person STW    schedule 03.03.2010

если вы хотите получить значения дополнительных параметров, вы можете использовать отражение, эта информация хранится в пользовательском атрибуте в соответствующем параметре.

person Andrey    schedule 03.03.2010
comment
Я думаю, вы неправильно поняли вопрос. Он хочет сделать SomeMethod(someGUID, "Some String") из C#, где сигнатура метода VB такая, как он указал. Что-то, что невозможно в C# ‹ 4.0 - person jamone; 03.03.2010