Есть ли проблема в Mono.CSharp.dll или я что-то упустил? - PullRequest
2 голосов
/ 23 ноября 2010

Я скачал файл demo-repl.zip с сайта Мигеля де Иказы .

Я пытался создать определенные программы, но все терпит неудачу. Моя простое консольное приложение.

Случай 1: печатать только имя на основе условия. Хорошо работает

static void Main(string[] args)
{
  Evaluator.Run("using System;");
  Evaluator.Run("using System.Linq;");
  Evaluator.Run("using System.Collections.Generic;"); 

  string dynamicQuery = ReplaceQuotes("List<string> names = new List<string> {'name1','name2','some thing else} ;");           
  dynamicQuery += ReplaceQuotes("foreach(string name in names)");
   dynamicQuery += ReplaceQuotes("if(name.Contains('name'))");             
  dynamicQuery += "Console.WriteLine(name);";
  Evaluator.Run(dynamicQuery); 

  Console.ReadLine();
}

private static string ReplaceQuotes(string str)
{            
            return str.Replace("'", "\"");
}
}

Случай 2: попытка выполнить то же самое с LINQ не удалась

string dynamicQuery = ReplaceQuotes("List<string> names = new List<string> {'name1','name2','some thing else'} ;");
dynamicQuery += ReplaceQuotes("var result = from name in names where name.Contains('name') select name;");
dynamicQuery += ReplaceQuotes("foreach(string name in result) Console.WriteLine(name);");

Ошибка во время выполнения:

{interactive}(1,109): error CS1935: An implementation of `Where' query expressio
n pattern could not be found. Are you missing `System.Linq' using directive or `
System.Core.dll' assembly reference?
{interactive}(1,149): error CS1579: foreach statement cannot operate on variable
s of type `object' because it does not contain a definition for `GetEnumerator'
or is not accessible

Случай 3: пробовать то же самое с лямбдой

string dynamicQuery = ReplaceQuotes("List<string> names = new List<string> {'name1','name2','some thing else'} ;");
dynamicQuery += ReplaceQuotes("names.Where(i => i.Contains('name')).ToList().ForEach(i => Console.WriteLine(i));");

На этот раз ошибка составляет

{interactive}(1,83): error CS1061: Type `System.Collections.Generic.List<string>
' does not contain a definition for `Where' and no extension method `Where' of t
ype `System.Collections.Generic.List<string>' could be found (are you missing a
using directive or an assembly reference?)

Я искал в сети и обнаружил, что люди просят включить System.Core и импортировать правильные пространства имен.

У меня уже есть это пространство имен

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mono.CSharp;

Тогда что, где, почему это неправильно?

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Добавить ссылку на System.Core в ваш проект или командную строку компиляции (-r: System.Core)

0 голосов
/ 15 декабря 2010

Добавить ссылку на System.Core и установить для локальной копии значение true.

...