本文整理汇总了C#中Record.SetFields方法的典型用法代码示例。如果您正苦于以下问题:C# Record.SetFields方法的具体用法?C# Record.SetFields怎么用?C# Record.SetFields使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Record
的用法示例。
在下文中一共展示了Record.SetFields方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InitVariable
/// <summary>
/// Инициализирует переменную
/// </summary>
/// <param name="name">Имя переменной</param>
/// <param name="type">Тип переменной</param>
/// <param name="add_to_enviroment">Флаг, указывающий на то, стоит ли добавлять переменную в окружение</param>
/// <returns>Созданную переменную</returns>
private Variable InitVariable(string name, string type)
{
if (name == null)
{
name = "DYNAMIC";
}
type = GetRealType(FindType(type).Trim());
bool pointer = (type.StartsWith("^")) ? true : false;
if (pointer)
{
type = type.Remove(0, 1);
Pointer p = new Pointer(name, type);
if (name != "")
env.Add(p, name);
return p;
}
else
{
if (type.StartsWith("record") && type.EndsWith("end"))
{
string var_type = type.Remove(0, 6)
.Remove(type.Length - 9);
var_type = var_type.Trim();
TypeStruct[] tmp = GetTypeStructFromField(var_type);
string[] names = new string[tmp.Length];
Record r = new Record(name);
r.type = type;
for (int i = 0; i < names.Length; i++)
names[i] = tmp[i].name;
r.SetFields(names);
for (int i = 0; i < names.Length; i++)
{
Variable v = InitVariable("", tmp[i].type);
r.SetVariable(v, names[i]);
}
if (name != "")
env.Add(r, name);
return r;
}
else if (type.StartsWith("array"))
{
Match m;
if ((m = Regexs.Match(type, Regs.ArrayClassic)).Success)
{
object start = null;
if (!env.TryCalculate(m.Groups["from"].Value, out start))
throw new Exception(m.Groups["from"].Value + " не может быть начальным индексом массива");
object end = null;
if (!env.TryCalculate(m.Groups["to"].Value, out end))
throw new Exception(m.Groups["to"].Value + " не может быть конечным индексом массива");
if (start.GetType().Name != end.GetType().Name)
throw new Exception("Тип начального и конечного индекса массива должны совпадать");
if (start == null)
throw new Exception("Индекс массива не распознан, возможно вы использовали недопустимое выражение");
int len = 0;
if (start.GetType().Name == "Double")
{
if ((double)start >= (double)end)
throw new Exception("Начальны индекс не может быть больше или равен конечному");
else if ((int)(double)end != (double)end || (int)(double)start != (double)start)
throw new Exception("Индекс не может быть вещественным числом");
else
len = (int)(double)end - (int)(double)start + 1;
}
else if (start.GetType().Name == "Boolean")
{
if ((bool)start == true || (bool)end == false)
throw new Exception("Начальны индекс не может быть больше или равен конечному");
else
len = 2;
}
Massiv mas = new Massiv(name);
string[] names = new string[len];
if (start.GetType().Name == "Boolean")
{
names[0] = "false";
names[1] = "true";
}
else
for (int i = 0; i < len; i++)
names[i] = (i + (int)(double)start).ToString();
mas.SetFields(names);
for (int i = 0; i < len; i++)
{
Variable v = InitVariable("", m.Groups["base_type"].Value);
mas.SetVariable(v, names[i]);
}
mas.type = type;
if (name != "")
env.Add(mas, name);
return mas;
//.........这里部分代码省略.........