Создание скрипта со списком

#c# #scripting

#c# #сценарии

Вопрос:

Я пытаюсь создать сценарий с Microsoft.CodeAnalysis.CSharp.Scripting помощью . Как только я добавлю List<> код ошибок. Я думал, что у меня были включены все необходимые ссылки и способы использования, однако в нем по-прежнему указаны ошибки The type or namespace name 'List<>' could not be found (are you missing a using directive or an assembly reference?

Это мои варианты использования в коде

 using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Diagnostics;
 

Ниже приведен мой пример модульного теста

 [TestMethod]
public void RunGenericListTest()
{
    var code = @"
List<string> strings = new List<string>();
strings.Add(""test string"");            
return output;";

    var options = ScriptOptions.Defau<

    options.WithReferences(typeof(System.Collections.CollectionBase).Assembly);
    options.WithReferences(typeof(System.Collections.Generic.List<>).Assembly);
    options.WithImports("System.Collections");
    options.WithImports("System.Collections.Generic");

    var result = CSharpScript.RunAsync(code, options).Resu<

    Debug.WriteLine(result);
}
 

Это приводит к ошибкам CSharpScript.RunAsync каждый раз. Может кто-нибудь просветить меня о том, чего мне не хватает?

Комментарии:

1. Честная игра для включения модульного теста. Приятно видеть вопросы с минимальными, воспроизводимыми примерами.

Ответ №1:

Я думаю, проблема в том, WithImports что не изменяет параметры, а скорее возвращает копию

 var code = @"
List<string> strings = new List<string>();
strings.Add(""test string"");            
return strings;";

    var options = ScriptOptions.Default
                .WithImports("System.Collections.Generic"); // chaining methods would work better here.
    // alternatively reassign the variable:
    // options = options.WithImports("System.Collections.Generic");

    var result = CSharpScript.RunAsync(code, options).Resu<

    Debug.WriteLine((result.ReturnValue as List<string>).First());
 

Комментарии:

1. Итак, это синтаксическая ошибка. Я не понимал, что объект options не будет добавлен, если вы не переназначите его самому себе. returns a copy Ссылка была немного сложной для понимания изначально, но также была полезной. Спасибо

2. @Thundter Мне жаль, что я не смог найти этот класс в документации. Пришлось обратиться к источнику