using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Assets.Scripts
{
public class BuildManager : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
private Image _image;
void Start()
{
_image = GetComponent<Image>();
if (_image is null)
{
throw new NullReferenceException(
$"The component of the type \"{nameof(Image)}\" not found.");
}
}
void Update()
{
}
public void OnPointerEnter(PointerEventData eventData)
{
_image.color = Color.green;
}
public void OnPointerExit(PointerEventData eventData)
{
_image.color = Color.white;
}
}
}
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace WinFormsApp
{
public partial class MainForm : Form
{
private readonly Timer _timer;
private int _counter;
public MainForm()
{
InitializeComponent();
_timer = new Timer();
_timer.Interval = 500;
_timer.Tick += OnTimerTick;
}
private void OnFormLoad(object sender, EventArgs e)
{
_timer.Start();
}
private void OnTimerTick(object sender, EventArgs e)
{
_label.Text = $"{nameof(OnTimerTick)}. {(++_counter).ToString()}";
}
}
}
public class Competitive
{
[JsonProperty("CurrentSeasonGamesNeededForRating")]
public int? CurrentSeasonGamesNeededForRating { get; set; }
[JsonProperty("SeasonalInfoBySeasonID")]
public object SeasonalInfoBySeasonID { get; set; }
}
<Window
x:Class="Monitor.SomeWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Monitor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="SomeWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Window.Resources>
<Style
x:Key="BaseFontFamily"
TargetType="TextBlock">
<Setter Property="FontSize" Value="90" />
</Style>
<Style
x:Key="Numbers1Style"
BasedOn="{StaticResource BaseFontFamily}"
TargetType="TextBlock">
<Setter Property="Foreground" Value="LightCoral" />
</Style>
<Style
x:Key="Numbers2Style"
BasedOn="{StaticResource BaseFontFamily}"
TargetType="TextBlock">
<Setter Property="Foreground" Value="Bisque" />
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{Binding TimeBlockStyle, RelativeSource={RelativeSource AncestorType=local:SomeWindow}}"
Text="{Binding Path=RightTeam.TeamCounter, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<Button
Grid.Row="1"
Click="OnButtonClick" />
</Grid>
</Window>
public partial class SomeWindow : Window
{
public static readonly DependencyProperty TimeBlockStyleProperty = DependencyProperty.Register(
nameof(TimeBlockStyle), typeof(Style), typeof(SomeWindow), new PropertyMetadata(default(Style)));
public Style TimeBlockStyle
{
get { return (Style)GetValue(TimeBlockStyleProperty); }
set { SetValue(TimeBlockStyleProperty, value); }
}
public SomeWindow()
{
InitializeComponent();
TimeBlockStyle = (Style)Resources["Numbers1Style"];
}
private void OnButtonClick(object sender, RoutedEventArgs e)
{
TimeBlockStyle = (Style)Resources["Numbers2Style"];
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
[System.Serializable]
public class TestEvent
{
[SerializeField] private int _b;
public int B => _b;
}
public class TestScript : MonoBehaviour
{
[SerializeField] private List<TestEvent> _testEvents;
private int a = 3;
void Start()
{
var events = _testEvents
.Where(item => item.B == a)
.ToArray();
}
}
public class TestScript : MonoBehaviour
{
[SerializeField] private List<TestEvent> _testEvents;
private int a = 3;
void Start()
{
var events = GetEvents(_testEvents, item => item.B == a);
}
private static List<TestEvent> GetEvents(
IEnumerable<TestEvent> testEvents, Func<TestEvent, bool> predicate)
{
var results = new List<TestEvent>();
foreach (var item in testEvents)
{
if (predicate(item))
{
results.Add(item);
}
}
return results;
}
}
public class TestScript : MonoBehaviour
{
[SerializeField] private List<TestEvent> _testEvents;
private int a = 3;
void Start()
{
var element = GetFirstOrDefault(_testEvents, item => item.B == a);
if (element is not null)
{
c = element.c;
r = element.r;
u = element.u;
}
}
// Если совпадение не найдено, то вернуть значение по умолчанию.
private static T GetFirstOrDefault<T>(IEnumerable<T> items, Func<T, bool> predicate)
{
foreach (var item in items)
{
if (predicate(item))
{
return item;
}
}
return default;
}
}
#ifdef _WIN32
#include <windows.h>
#endif
#include <iostream>
#include <fstream>
#include <string>
bool IsLoggedIn()
{
using namespace std;
// ...
return un == username && pw == password;
}
int main()
{
using namespace std;
#ifdef _WIN32
// https://habr.com/ru/sandbox/108750/
// Устраняет проблемы выводом кириллицы на консоль Windows
// Файл должен быть сохранён с кодировкой Windows 1251
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
#endif
int choice;
do
{
cout << "1: Register\n2: Login\n Your choice: ";
cin >> choice;
if (choice == 1)
{
// ...
}
else if (choice == 2)
{
bool status = IsLoggedIn();
if (!status)
{
cout << "False Login!\n";
}
else
{
cout << "Succesfully logged in!\n";
}
#ifdef _WIN32
system("pause");
#endif
return status ? 1 : 0;
}
} while (choice == 1);
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
// Чтение JSON из файла и десериализация.
string pathToFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PartnerData.json");
string jsonText = File.ReadAllText(pathToFile, Encoding.UTF8);
var parterAddressesFromFile = JsonSerializer.Deserialize<TriggerData>(jsonText);
// Вывод на консоль.
Display(parterAddressesFromFile);
// Создание нового экземпляра класса TriggerData и его заполнение данными.
var data = new TriggerData()
{
PartnerAddresses = new List<PartnerAddress>()
{
new PartnerAddress()
{
Type = "Тип 0001",
Country = "Страна 0001",
Region = "Регион 0001",
City = "Город 0001",
Presentation = "Представление 0001",
},
new PartnerAddress()
{
Type = "Тип 0002",
Country = "Страна 0002",
Region = "Регион 00021",
City = "Город 0002",
Presentation = "Представление 0002",
}
}
};
// Сериализация.
var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.Cyrillic),
WriteIndented = true,
};
var newJsonText = JsonSerializer.Serialize(data, options);
// Вывод на консоль.
Console.WriteLine(newJsonText);
}
private static void Display(TriggerData data)
{
// Способ 1.
foreach (var address in data.PartnerAddresses)
{
// Внутри Console.WriteLine будет вызван метод ToString для
// экземпляра класса PartnerAddress, у которого этот метод переопределён.
// https://source.dot.net/#System.Private.CoreLib/TextWriter.cs,09da57c2c21a3a44
Console.WriteLine(address);
}
// Способ 2.
//for (int i = 0; i < data.PartnerAddresses.Count; i++)
//{
// Console.WriteLine(data.PartnerAddresses[i]);
//}
}
}
}
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace ConsoleApp
{
public class TriggerData
{
[JsonPropertyName("партнерАдреса")]
public List<PartnerAddress> PartnerAddresses { get; set; }
}
}
using System.Text.Json.Serialization;
namespace ConsoleApp
{
public class PartnerAddress
{
[JsonPropertyName("тип")]
public string Type { get; set; }
[JsonPropertyName("страна")]
public string Country { get; set; }
[JsonPropertyName("регион")]
public string Region { get; set; }
[JsonPropertyName("город")]
public string City { get; set; }
[JsonPropertyName("представление")]
public string Presentation { get; set; }
public override string ToString()
{
return $"{Type}, {Country}, {Region}, {City}, {Presentation}";
}
}
}
{
"партнерАдреса": [
{
"тип": "тип1",
"страна": "страна1",
"регион": "регион1",
"город": "город1",
"представление": "представление1"
},
{
"тип": "тип2",
"страна": "страна2",
"регион": "регион2",
"город": "город2",
"представление": "представление2"
},
{
"тип": "null",
"страна": "null",
"регион": "null",
"город": "null",
"представление": "null"
},
{
"тип": "тип3",
"страна": "страна3",
"регион": "регион3",
"город": "город3",
"представление": "представление3"
}
]
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="PartnerData.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static async Task Main(string[] args)
{
try
{
// Создаём экземпляр класса
var scanner = new Scanner();
// Вызываем асинхронный метод Scan, метод работает
// какое-то время, возвращает результат.
var data = await scanner.Scan();
foreach (var item in data)
{
// Выводим на консоль.
Console.WriteLine(item);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
public class Scanner
{
public Task<List<string>> Scan()
{
return Task.Run(async () =>
{
var results = new List<string>();
for (int i = 0; i < 10; i++)
{
// Делаем правильную задержку (имитация долгой работы для примера).
await Task.Delay(250);
// Собираем данные
results.Add(DateTimeOffset.Now.ToLocalTime().ToString());
}
return results;
});
}
public async Task<List<string>> ScanVersion2()
{
return await Task.Factory.StartNew(async () =>
{
var results = new List<string>();
for (int i = 0; i < 10; i++)
{
// Делаем правильную задержку (имитация долгой работы для примера).
await Task.Delay(250);
// Собираем данные
results.Add(DateTimeOffset.Now.ToLocalTime().ToString());
}
return results;
}, TaskCreationOptions.LongRunning)
.Unwrap() // Без этого возвращается Task<List<string>>, а не List<string>
.ConfigureAwait(false);
}
}
}
dotnet new classlib -n "LibraryName" -lang "C#" -o "D:\Projects\LibraryName"
using System;
using System.Windows.Forms;
namespace WinFormsApp
{
public partial class MainForm : Form
{
private readonly Random _random;
private readonly Timer _timer;
public MainForm()
{
InitializeComponent();
_random = new Random();
_timer = new Timer();
_timer.Interval = 500;
_timer.Tick += OnTimerTick;
}
private void OnFormLoad(object sender, EventArgs e)
{
_timer.Start();
}
private void OnTimerTick(object sender, EventArgs e)
{
label.Text = _random.Next(0, 1000).ToString();
}
}
}
private readonly string url = "https://kad.arbitr.ru/Card?number=";
private void OnWebBrowserFrameLoadEnded(object sender, FrameLoadEndEventArgs e)
{
Debug.WriteLine($"{nameof(OnWebBrowserFrameLoadEnded)}. " +
$"Frame.IsMain: {e.Frame.IsMain.ToString()}; e.Url: {e.Url};");
if (e.Frame.IsMain && e.Url.Contains(url))
{
Invoke((MethodInvoker)(async () =>
{
await UpdateData();
}));
}
}
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
namespace GameSaveExample
{
class Program
{
static async Task Main(string[] args)
{
try
{
var rootDirectory = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"AppName");
using var repository = new GameSaveRepository(rootDirectory, "SaveFile.bin");
Console.WriteLine("Первоначальная загрузка данных и вывод на экран:");
SaveData data = await repository.Load();
Display(data);
Console.WriteLine("Сохраняем изменённые данные и выводим на экран:");
data.Id += 5;
await repository.Save(data);
Display(data);
Console.WriteLine("-------------------------");
Console.WriteLine("Загружаем данные из файла и выводим на экран:");
data = await repository.Load();
Display(data);
Process.Start("explorer.exe", rootDirectory);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
private static void Display(SaveData data)
{
Console.WriteLine($"Version: {data.Version}, ID: {data.Id}");
}
}
}
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace GameSaveExample
{
/// <summary>
/// Класс, который умеет сохранять данные и загружать.
/// </summary>
public class GameSaveRepository : IDisposable
{
private readonly string _rootDirectory;
private readonly string _fileName;
private readonly string _pathToFile;
private readonly SemaphoreSlim _semaphore;
public GameSaveRepository(string rootDirectory, string fileName)
{
_rootDirectory = rootDirectory;
_fileName = fileName;
_pathToFile = Path.Combine(_rootDirectory, fileName);
_semaphore = new SemaphoreSlim(1);
}
public async Task<SaveData> Load()
{
await _semaphore.WaitAsync();
var data = new SaveData();
try
{
await Task.Run(() =>
{
if (File.Exists(_pathToFile))
{
using var stream = File.OpenRead(_pathToFile);
using var reader = new BinaryReader(stream);
data.Version = reader.ReadInt32();
data.Id = reader.ReadInt32();
}
});
return data;
}
catch (Exception ex)
{
Debug.WriteLine(ex);
throw;
}
finally
{
_semaphore.Release();
}
}
public async Task Save(SaveData data)
{
await _semaphore.WaitAsync();
try
{
await Task.Run(() =>
{
if (!Directory.Exists(_rootDirectory))
{
Directory.CreateDirectory(_rootDirectory);
}
using var stream = File.OpenWrite(_pathToFile);
using var writer = new BinaryWriter(stream);
writer.Write(data.Version);
writer.Write(data.Id);
});
}
catch (Exception ex)
{
Debug.WriteLine(ex);
throw;
}
finally
{
_semaphore.Release();
}
}
public void Dispose()
{
_semaphore?.Dispose();
}
}
}
namespace GameSaveExample
{
public class SaveData
{
/// <summary>
/// Версия формата файла. Добавил, удалил или изменил свойство, тогда поднимаем версию.
/// На каждую версию свой класс сериализатор-десериализатор.
/// </summary>
public int Version { get; set; }
/// <summary>
/// Какие-то данные.
/// </summary>
public int Id { get; set; }
}
}