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

  • Автор темы Автор темы bhairava7
  • Дата начала Дата начала

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 ничего не нашёл по этому поводу.
 
В юзингах вкладка Общий код называется
 
В юзингах вкладка Общий код называется
Да, видел эту вкладку, но куда там именно, в пространство имён?
Если не сложно приведите, пожалуйста, пример на основе этого кода:

Код:
Развернуть Свернуть Копировать
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
    }
}
 
я пробовал вставлять после:

Код:
Развернуть Свернуть Копировать
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
    }
}
 
После строки:
Код:
Развернуть Свернуть Копировать
public static object SyncObject = new object();

        // Insert your code here

Комментарий - Insert your code here/Вставьте свой код сюда
 
После строки:
Код:
Развернуть Свернуть Копировать
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 в требуемом контексте?)
 
Все правильно, только функцию нужно объявить как 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();
 
Последнее редактирование:
Общий код.
Разделяемых объектов нет, можно в принципе не лочить ничего.
Закаментил синк.

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
 
Все правильно, только функцию нужно объявить как 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
  • Оценить
Реакции: bhairava7
Здорово!
Вызывать можно попроще немного... класс и функция:
Код:
Развернуть Свернуть Копировать
CommonCode.ConvertToUnixTimestamp();
Да, я уже увидел коммент 7make
Теперь понял, что можно и название класса на свой поменять)
Ох, крутатень, теперь знаю как свои функции юзать)

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

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