Блог про ZennoPoster от volody00

volody00

Client
Регистрация
06.09.2016
Сообщения
845
Благодарностей
856
Баллы
93
Раз в неделю буду выкладывать небольшие видео про ZennoPoster.

Подписывайтесь также в телеграмм канал - https://t.me/zennovolody00
 
  • Спасибо
Реакции: Dmitriy Ka

volody00

Client
Регистрация
06.09.2016
Сообщения
845
Благодарностей
856
Баллы
93

volody00

Client
Регистрация
06.09.2016
Сообщения
845
Благодарностей
856
Баллы
93
Решил я тут поизучать конкретные классы из .Net Framework, но не знаю, надолго ли меня хватит. Довольно скучно, долго и непонятно, где применять большую часть методов / свойств.

Начал я с класса String - https://learn.microsoft.com/en-us/dotnet/api/system.string?view=net-8.0 . Да, по сути пересказ справки (возможны неточности), но сильно урезанный, на русском и примеры адаптированы под зеннопостер.

Все эти методы вы можете использовать для своих "зенковских переменных" используя project.Variables["имя_переменной"].Value


Методы (часть 1)

public object Clone() – метод Clone() для строк возвращает ссылку на тот же объект, а не создаёт независимую копию. По сути вот эти два подхода будут одинаковы:

C#:
//1 подход
string str1 = "строка 1";
string str2 = str1.Clone().ToString();
str2 = "12345";
project.SendInfoToLog(str1); //строка 1 (не изменилась, хоть и ссылается на тот же объект)

//2 подход
string ostr1 = "строка 2";
string ostr2 = ostr1;
public static int Compare (…)– метод позволяет сравнивать две строки. Много нюансов, много перегрузок. Сравнение идёт по символам. Там учитывается их расположение в Unicode (https://en.wikipedia.org/wiki/List_of_Unicode_characters), регистр и др. https://learn.microsoft.com/en-us/dotnet/api/system.string.compare?view=net-8.0
C#:
string str1 = "hello";
string str2 = "Hello";
int result = string.Compare(str1, str2, true);
project.SendInfoToLog(result.ToString()); //0 , т.к. игнорируем регистр

result = string.Compare(str1, str2, false);
project.SendInfoToLog(result.ToString()); //-1, несмотря на то, что h имеет большее число чем H. Если не ошибаюсь, то заглавные буквы считаются большими чем строчные
public int CompareTo (string str) – сравнение двух строк исключительно по "весу" в таблице Unicode. Берется по одному символу. Если они одинаковы (вес равен) берется следующий и сравнивается.
C#:
string str1 = "hello";
string str2 = "Hdfhdfhdfhfdh";

int result = str1.CompareTo(str2);
project.SendInfoToLog(result.ToString()); //1, т.к. h имеет большее число по unicode чем H
public static int CompareOrdinal (string str1, string str2) – разница в весах по таблице Unicode

C#:
string str1 = "hello";
string str2 = "Hdfhdfhdfhfdh";

int result = string.CompareOrdinal(str1, str2);
project.SendInfoToLog(result.ToString()); //32, т.к. разница между h и H по unicode будет 32. остальные символы игнорируются
public static string Concat (…) – объединяет строки. Можно передать строки (до 4 шт), object (до 4 шт), массив, список (любого типа).
C#:
string result1 = string.Concat(new string[] {"1", "2", "3"});
string result2 = string.Concat(new object[] {"123", 123, true});

object o1 = 123;
object o2 = "123";
string result3 = string.Concat(o1, o2);

List<int> list = new List<int>() {
            123,
            456,
            789
};
string result4 = string.Concat(list); //123456789
public bool Contains (…) – содержится ли указанное значение в строке. можно проверять строку или символ
C#:
string s1 = "The quick brown fox jumps over the lazy dog";
string s2 = "fox";
StringComparison comp = StringComparison.Ordinal;
bool b = s1.Contains(s2);
char symb = '&';
bool bb = s1.Contains(symb);
public static string Copy (string str) – создает независимую копию строки. Не рекомендуется к использованию
C#:
string sourceString = "Hello, World!";
string copy = string.Copy(sourceString);
return copy;
public void CopyTo (int sourceIndex, char[] destination, int destinationIndex, int count) - метод позволяет вытащить какой-то кусок из строки и поместить в массив символов
C#:
string sourceString = "Hello, World!";
char[] destinationArray = new char[20];

sourceString.CopyTo(7, destinationArray, 2, 5); //с какого символа копируем в исходной строке, куда помещаем результат, куда вставляем результат (с какого индекса), сколько копируем из исходной строки
foreach(var s in destinationArray)
{
            project.SendInfoToLog(s.ToString());
}
[1 перегрузка] public bool EndsWith (string value, bool ignoreCase, System.Globalization.CultureInfo? culture) – заканчивается ли строка указанным значением. Параметры: искомое значение, игнорировать ли регистр, Culture Info

[2 перегрузка] public bool EndsWith (string value, StringComparison comparisonType)

[3 перегрузка] public bool EndsWith (string value)
C#:
string msg1 = "Search for the target string";
bool result1 = msg1.EndsWith("string");
bool result2 = msg1.EndsWith("STRING", true, CultureInfo.CurrentCulture);
bool result3 = msg1.EndsWith("asdf", StringComparison.CurrentCulture);

project.SendInfoToLog($"{result1.ToString()}\n{result2.ToString()}\n{result3.ToString()}");
Класс CultureInfo учитывает специфику конкретной страны / языка. Про CultureInfo- https://learn.microsoft.com/en-us/dotnet/fundamentals/runtime-libraries/system-globalization-cultureinfo

public bool StartsWith (…) – аналогично методу EndsWith(…), только поиск идет в начале строки.

Equals(…) - сравнивает строки. Можно передать string, object, указать StringComparison
C#:
StringBuilder sb = new StringBuilder("abcd");
string str1 = "abcd";
string str2 = "abcd";
object o2 = "abcd";

bool result1 = str1.Equals(sb); //False
bool result2 = str2.Equals(o2); //True
public static string Format (…) – позволяет преобразовать строку в указанном формате. Им активно пользовались раньше. Сейчас же обычно используют интерполяцию строк. Но здесь больше настроек. Пример использования

C#:
string result = string.Format("Имя нашего персонажа {0}, а фамилия {1}", str1, str2);
return result;
Мы можем вставлять не только строки, но и другие базовые типы

double d = 2.05;
bool b = true;
string str = string.Format("это double {0}, а это bool {1}", d, b);
return str;
Можно добавить пробелов к началу строки. Для этого надо посчитать длину строки и к этому числу прибавить столько пробелов, сколько нам нужно
C#:
string str = "Вася Пупкин пошёл гулять"; //длина строки 24 символа
string result = string.Format("результат: {0, 30}", str); //добавим 6 пробелов в начало строки
return result;
Можно преобразовывать числовые типы и DateTime с помощью форматных спецификаторов. Почитать какие они бывают можно тут
C#:
double d = 1.05;
string result = string.Format("результат: {0:p}", d);
return result; //105, 00%
Можно использовать CultureInfo для задания нужного формата конкретного языка
C#:
DateTime now = DateTime.Now;
CultureInfo cultureUs = new CultureInfo("en-US");
CultureInfo cultureRu = new CultureInfo("ru-Ru");

string resultUs = string.Format(cultureUs, "время для en-us: {0}", now);
project.SendInfoToLog(resultUs); // время для en-us: 7/12/2024 8:20:40 AM

string resultRu = string.Format(cultureRu, "время для ru: {0}", now);
project.SendInfoToLog(resultRu);  // время для ru: 12.07.2024 8:20:40
public CharEnumerator GetEnumerator () – возвращает объект CharEnumerator. Это своего рода коллекция, где для перехода к следующему элементу надо использовать метод MoveNext()
C#:
string str = "вася";
CharEnumerator ch = str.GetEnumerator();

//принцип работы
ch.MoveNext(); //переходим к первому элементу в коллекции
project.SendInfoToLog(ch.Current.ToString()); //в
project.SendInfoToLog(ch.Current.ToString()); //в

ch.MoveNext(); //теперь к следующему
project.SendInfoToLog(ch.Current.ToString()); //а

//метод reset() сбрасывает действие метода MoveNext() и возвращает нас к началу
ch.Reset();

//пример перебора в цикле
while (ch.MoveNext())
{
            project.SendInfoToLog(ch.Current.ToString()); //будет выводить по одному символу за круг, пока не пройдется по всем
}

//высвобождаем память (может и необязательно хз)
ch.Dispose();

//теперь наш ch уже не существует
try {
            ch.MoveNext();
}
catch{
            project.SendInfoToLog("ошибка, т.к. мы его уничтожили");
}
public static int GetHashCode() - получает hash code элемента. hash code представляет собой числовое значение, которое вычисляется на основе содержимого объекта и служит для быстрого сравнения объектов или для использования в коллекциях

C#:
string str = "вася";
int result = str.GetHashCode();
return result;
public TypeCode GetTypeCode () – возвращает перечисление TypeCode, позволяющее понять нам, с каким типом данных мы работаем.Может быть полезно, если метод в качестве параметра принимает object, и мы точно не знаем, какой тип будет в него передан.
C#:
string str = "вася";
TypeCode tc = str.GetTypeCode();
project.SendInfoToLog(tc.ToString()); //String

dynamic eks1 = "петя";
TypeCode eks1Tc = eks1.GetTypeCode();
project.SendInfoToLog(eks1Tc.ToString()); //String

var eks2 = "петя";
TypeCode eks2Tc = eks2.GetTypeCode();
project.SendInfoToLog(eks2Tc.ToString()); //String
 
  • Спасибо
Реакции: Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
646
Благодарностей
400
Баллы
63
Удачи в начинаниях, буду следить!
Лайк, подписка :-)
 

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