C# Невозможно преобразовать 'out string' в 'out dynamici c' - PullRequest
2 голосов
/ 11 февраля 2020

У меня есть функция структурно , похожая на эту:

void Foo(dynamic arg1, dynamic arg2, out dynamic result) {
    result = arg1 + arg2;
}

Я использую Dynami c, поскольку эта функция должна обрабатывать любой тип, который я к ней добавляю.
Но если я попытаюсь назвать это так:

string Bar = null;
...
Foo("a", "b", out this.Bar);

я получаю сообщение об ошибке; Кажется, я не могу передать свою предопределенную строку Bar в функцию (Cannot convert from 'out string' to 'out dynamic').
Однако, когда я удаляю ключевое слово out из объявления типа и моего вызова функции, все работает совершенно нормально ( Я упоминаю об этом, чтобы доказать, что все остальное работает отлично).
Я не понимаю, почему модификатор out меняет всю ситуацию, и Dynami c внезапно не может быть приведен к строке, как я был бы в состоянии сделать это, неявно присваивая его , как указано в документах .
Я был бы рад любой помощи, по-видимому, не так уж много людей передают строки функции, ожидающей dynamic с модификатором out ...

1 Ответ

3 голосов
/ 11 февраля 2020

Я получаю сообщение об ошибке; Кажется, я не могу передать свою предопределенную строку Bar в функцию (невозможно преобразовать 'out string' в 'out dynamici c').

Причина этой ошибки в том, что она не может быть выведено Однако, чтобы обойти это, вы можете использовать обобщенный c, который удовлетворяет этому.

 void Foo<T>(dynamic arg1, dynamic arg2, out T result)

Все работает, как и ожидалось из вашего примера ...

 Foo("a", "b", out this.Bar); // "ab"
 Foo(1, 123, out int test); // test == 124
...