Как использовать свои функции C#

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
Куда вписывать свою функцию, например, для преобразования DateTime в UNIX формат?

Функция преобразования:

Код:
static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    TimeSpan diff = date - origin;
    return Math.Floor(diff.TotalSeconds);
}
В экшене C# это не получается сделать, возникают ошибки, в юзингах не понятно куда вставлять её.
В Wiki ничего не нашёл по этому поводу.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
В юзингах вкладка Общий код называется
 

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
В юзингах вкладка Общий код называется
Да, видел эту вкладку, но куда там именно, в пространство имён?
Если не сложно приведите, пожалуйста, пример на основе этого кода:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        // Insert your code here
    }
}
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 913
Баллы
113

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
я пробовал вставлять после:

Код:
namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        // Insert your code here
    }
}
Но из экшена C# не получилось вызвать функцию так: ConvertToUnixTimestamp(тут переменная с датой)
Если можете, приведите, пожалуйста, пример куда вставлять в моём случае эту функцию:
Код:
static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    TimeSpan diff = date - origin;
    return Math.Floor(diff.TotalSeconds);
}
в этом юзинге:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        // Insert your code here
    }
}
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 913
Баллы
113
После строки:
Код:
public static object SyncObject = new object();

        // Insert your code here
Комментарий - Insert your code here/Вставьте свой код сюда
 

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
После строки:
Код:
public static object SyncObject = new object();

        // Insert your code here
Комментарий - Insert your code here/Вставьте свой код сюда
Благодарю за ответ, вставил куда говорите:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        // Insert your code here
        static double ConvertToUnixTimestamp(DateTime date)
        {
            DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            TimeSpan diff = date - origin;
            return Math.Floor(diff.TotalSeconds);
        }
    }
}
в экшене C# следующий код:
Код:
DateTime nowTime = DateTime.Now;
DateTime endTime = DateTime.Now.AddMinutes(60);


int nowUnixTime = ConvertToUnixTimestamp(nowTime);
int endUnixTime = ConvertToUnixTimestamp(endTime);

project.Variables["now_time"].Value = nowTime.ToString();
project.Variables["end_time"].Value = endTime.ToString();

project.Variables["now_time_unix"].Value = nowUnixTime.ToString();
project.Variables["end_time_unix"].Value = endUnixTime.ToString();


return 1;
переменные now_time, end_time, now_time_unix, end_time_unix в шаблоне заведены, но всё-равно ошибка возникает, вот, что содержится в логе:
Код:
2015-09-18 14:10:43.3236|WARN|ZennoLab.LogLibrary.InternalError|Ошибка в модуле "Компиляция кода действия id: fa782777-3064-4881-bd0c-5c33570dc777 группы действий id: 8f14043c-5d33-416f-95b1-4a7fd72479c3"
Сообщение: "Ошибка в действии "CS0103" "Имя "ConvertToUnixTimestamp" отсутствует в текущем контексте". [Строка: 4; Cтолбец: 19]"
2015-09-18 14:10:43.3386|WARN|ZennoLab.LogLibrary.InternalError|Ошибка в модуле "Компиляция кода действия id: fa782777-3064-4881-bd0c-5c33570dc777 группы действий id: 8f14043c-5d33-416f-95b1-4a7fd72479c3"
Сообщение: "Ошибка в действии "CS0103" "Имя "ConvertToUnixTimestamp" отсутствует в текущем контексте". [Строка: 5; Cтолбец: 19]"
Как объявить присутствие ConvertToUnixTimestamp в требуемом контексте?)
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 913
Баллы
113
Все правильно, только функцию нужно объявить как public:
Код:
public static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    TimeSpan diff = date - origin;
    return Math.Floor(diff.TotalSeconds);
}
и вызвать вот так:
Код:
CommonCode.ConvertToUnixTimestamp();
 
Последнее редактирование:

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

Общий код.
Разделяемых объектов нет, можно в принципе не лочить ничего.
Закаментил синк.

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class Converter
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        //public static object SyncObject = new object();

        public static double ConvertToUnixTimestamp(DateTime date)
        {
            DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            TimeSpan diff = date - origin;
            return Math.Floor(diff.TotalSeconds);
        }
    }
}

Раз метод статичный, то и юзаем его статично, сразу вызываем на классе.

Юзаем в снипете так:

C#:
return Converter.ConvertToUnixTimestamp(DateTime.Now);

https://msdn.microsoft.com/ru-ru/library/vstudio/system.datetime(v=vs.100).aspx
 

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
Все правильно, только функцию нужно объявить как public:
Код:
public static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    TimeSpan diff = date - origin;
    return Math.Floor(diff.TotalSeconds);
}
и вызвать вот так:
Код:
ZennoLab.OwnCode.CommonCode.ConvertToUnixTimestamp();
еее, заработало))

только тип данных изменил на double в экшене.

Кому понадобится на будущее, то делается это так:

в юзингах пишем такой код (если с нуля делается проект):
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        // Insert your code here
        public static double ConvertToUnixTimestamp(DateTime date)
        {
            DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            TimeSpan diff = date - origin;
            return Math.Floor(diff.TotalSeconds);
        }
    }
}
полагается, что все нужные переменные уже заведены в шаблоне, тогда экшен C# будет иметь следующий код:
Код:
DateTime nowTime = DateTime.Now;
DateTime endTime = DateTime.Now.AddMinutes(60);


double nowUnixTime = ZennoLab.OwnCode.CommonCode.ConvertToUnixTimestamp(nowTime);
double endUnixTime = ZennoLab.OwnCode.CommonCode.ConvertToUnixTimestamp(endTime);

project.Variables["now_time"].Value = nowTime.ToString();
project.Variables["end_time"].Value = endTime.ToString();

project.Variables["now_time_unix"].Value = nowUnixTime.ToString();
project.Variables["end_time_unix"].Value = endUnixTime.ToString();


return 1;
Этот пример получает текущую дату и дату с прибавленным интервалом времени в минутах в формате DateTime
и конвертирует эти даты в Unix формат в соответствующие переменные с префиксом _unix.

Благодарю еще раз! :-)
 
  • Спасибо
Реакции: zonawm и VladZen

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 913
Баллы
113
  • Спасибо
Реакции: bhairava7

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
Здорово!
Вызывать можно попроще немного... класс и функция:
Код:
CommonCode.ConvertToUnixTimestamp();
Да, я уже увидел коммент 7make
Теперь понял, что можно и название класса на свой поменять)
Ох, крутатень, теперь знаю как свои функции юзать)

Еще раз премного благодарен всем откликнувшимся! :-)
Хорошего всем дня и вечера))
 

nik-n

Client
Регистрация
05.11.2016
Сообщения
242
Благодарностей
20
Баллы
18
ебать калатить крутая вещь ))
как без этого жил раньше не знаю даже ))
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)