[новичок в С#]
Привет. Это проверка CS-скрипт 3.28.7, добавить скрипты в C#. Мне нужно реализовать очень простые функции, которые потом будут считываться из файла cfg.
Я просмотрел документы, но не нашел способ читать внешние классы и статические переменные. Я получаю как для values, так и для rnd сообщение the name XXX is not available in this context.
Что я забыл?
using System;
using CSScriptLibrary;
namespace EmbedCS
{
class Program
{
public static int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
static Random rnd = new Random();
static void Main(string[] args)
{
ExecuteTest();
Console.Read();
}
private static void ExecuteTest()
{
bool result;
var scriptFunction = CSScript.CreateFunc<bool>(@"
bool func() {
int a = rnd.Next(10);
int b = rnd.Next(10);
return values[a] > values[b];
}
");
result = (bool)scriptFunction();
Console.Read();
}
}
}





Этот должен работать
using System;
using CSScriptLibrary;
namespace EmbedCS
{
public class Program
{
public static int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
public static Random rnd = new Random();
static void Main(string[] args)
{
ExecuteTest();
Console.Read();
}
private static void ExecuteTest()
{
bool result;
var scriptFunction = CSScript.CreateFunc<bool>(@"
bool func() {
int a = EmbedCS.Program.rnd.Next(10);
int b = EmbedCS.Program.rnd.Next(10);
return EmbedCS.Program.values[a] > EmbedCS.Program.values[b];
}
");
result = (bool)scriptFunction();
Console.Read();
}
}
}
Помните, что в C# все так неявно.
ваш func() не является членом Program. Поэтому они не могут распознавать поля внутри Program.
Некоторые динамические языки имеют контекст привязки (например, ruby binding) на уровне языка, поэтому библиотеки могут заниматься черной магией. но не в С#.
Я посмотрел на ссылку, но не понимаю, где разместить using static ее в моем коде. Я бы использовал его внутри скрипта в качестве первой строки (using static EmbedCS.Program.values;), но не могу найти правильный синтаксис.
Если вы хотите сделать код чистым, попробуйте этот docs.microsoft.com/en-us/dotnet/csharp/language-reference/…