From e6d08c2db1c06d9ea34f3752f6170052baf4fc7a Mon Sep 17 00:00:00 2001 From: DHR60 Date: Sat, 6 Jun 2026 03:20:06 +0000 Subject: [PATCH] Code clean (#9482) --- .../Singbox/CoreConfigSingboxServiceTests.cs | 4 +-- v2rayN/ServiceLib/Common/CountryExtension.cs | 2 +- v2rayN/ServiceLib/Common/Extension.cs | 2 +- v2rayN/ServiceLib/Handler/ConfigHandler.cs | 22 ++++++------ .../ServiceLib/Handler/ConnectionHandler.cs | 4 +-- v2rayN/ServiceLib/Handler/Fmt/InnerFmt.cs | 2 +- v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs | 2 +- .../ServiceLib/Handler/SubscriptionHandler.cs | 4 +-- v2rayN/ServiceLib/Manager/AppManager.cs | 2 +- v2rayN/ServiceLib/Manager/ClashApiManager.cs | 21 +++++------ .../ServiceLib/Manager/GroupProfileManager.cs | 6 ++-- v2rayN/ServiceLib/Manager/ProfileExManager.cs | 4 +-- .../ServiceLib/Manager/StatisticsManager.cs | 2 +- .../Models/CoreConfigs/V2rayConfig.cs | 2 +- v2rayN/ServiceLib/Models/Dto/RetResult.cs | 22 ++++-------- .../CoreConfig/CoreConfigClashService.cs | 33 +++++++---------- .../Singbox/CoreConfigSingboxService.cs | 4 +-- .../Singbox/SingboxConfigTemplateService.cs | 6 ++-- .../CoreConfig/Singbox/SingboxDnsService.cs | 12 +++---- .../Singbox/SingboxInboundService.cs | 6 ++-- .../Singbox/SingboxOutboundService.cs | 4 +-- .../Singbox/SingboxRoutingService.cs | 4 +-- .../Singbox/SingboxRulesetService.cs | 16 ++++----- .../V2ray/CoreConfigV2rayService.cs | 4 +-- .../CoreConfig/V2ray/V2rayBalancerService.cs | 6 ++-- .../V2ray/V2rayConfigTemplateService.cs | 5 +-- .../CoreConfig/V2ray/V2rayDnsService.cs | 12 ++++--- .../CoreConfig/V2ray/V2rayInboundService.cs | 2 +- .../CoreConfig/V2ray/V2rayOutboundService.cs | 17 +++++---- .../CoreConfig/V2ray/V2rayStatisticService.cs | 2 +- .../ServiceLib/Services/SpeedtestService.cs | 16 ++++----- .../ServiceLib/Services/WindowsJobService.cs | 3 +- .../ViewModels/AddGroupServerViewModel.cs | 2 +- .../ViewModels/AddServer2ViewModel.cs | 2 +- .../ViewModels/ClashConnectionsViewModel.cs | 4 +-- .../ViewModels/ClashProxiesViewModel.cs | 11 +++--- .../ViewModels/DNSSettingViewModel.cs | 2 +- .../ViewModels/OptionSettingViewModel.cs | 9 ++--- .../ViewModels/ProfilesSelectViewModel.cs | 35 +++++-------------- .../ViewModels/ProfilesViewModel.cs | 4 +-- .../ViewModels/RoutingRuleDetailsViewModel.cs | 2 +- .../ViewModels/RoutingRuleSettingViewModel.cs | 2 +- .../ViewModels/StatusBarViewModel.cs | 3 +- v2rayN/v2rayN.Desktop/App.axaml.cs | 8 +++-- .../ViewModels/ThemeSettingViewModel.cs | 6 ++-- .../Views/AddServer2Window.axaml.cs | 2 +- .../Views/ClashConnectionsView.axaml.cs | 2 +- .../Views/GlobalHotkeySettingWindow.axaml.cs | 2 +- .../v2rayN.Desktop/Views/MainWindow.axaml.cs | 4 +-- .../Views/ProfilesView.axaml.cs | 2 +- .../Views/StatusBarView.axaml.cs | 5 +-- v2rayN/v2rayN/App.xaml.cs | 2 +- .../ViewModels/ThemeSettingViewModel.cs | 12 +++---- v2rayN/v2rayN/Views/AddServer2Window.xaml.cs | 2 +- .../v2rayN/Views/ClashConnectionsView.xaml.cs | 2 +- .../Views/GlobalHotkeySettingWindow.xaml.cs | 2 +- v2rayN/v2rayN/Views/MainWindow.xaml.cs | 4 +-- v2rayN/v2rayN/Views/ProfilesView.xaml.cs | 2 +- 58 files changed, 169 insertions(+), 217 deletions(-) diff --git a/v2rayN/ServiceLib.Tests/CoreConfig/Singbox/CoreConfigSingboxServiceTests.cs b/v2rayN/ServiceLib.Tests/CoreConfig/Singbox/CoreConfigSingboxServiceTests.cs index 158ba239..5847365b 100644 --- a/v2rayN/ServiceLib.Tests/CoreConfig/Singbox/CoreConfigSingboxServiceTests.cs +++ b/v2rayN/ServiceLib.Tests/CoreConfig/Singbox/CoreConfigSingboxServiceTests.cs @@ -554,7 +554,7 @@ public class CoreConfigSingboxServiceTests cfg.dns.servers.Should().Contain(s => s.tag == "remote" && s.type == "udp" && s.server == "8.8.8.8"); cfg.dns.servers.Should().Contain(s => s.tag == Global.SingboxLocalDNSTag); - cfg.dns.rules.Should().Contain(r => r.clash_mode == ERuleMode.Global.ToString()); - cfg.dns.rules.Should().Contain(r => r.clash_mode == ERuleMode.Direct.ToString()); + cfg.dns.rules.Should().Contain(r => r.clash_mode == nameof(ERuleMode.Global)); + cfg.dns.rules.Should().Contain(r => r.clash_mode == nameof(ERuleMode.Direct)); } } diff --git a/v2rayN/ServiceLib/Common/CountryExtension.cs b/v2rayN/ServiceLib/Common/CountryExtension.cs index 152172d8..4028c802 100644 --- a/v2rayN/ServiceLib/Common/CountryExtension.cs +++ b/v2rayN/ServiceLib/Common/CountryExtension.cs @@ -87,6 +87,6 @@ public static class CountryExtension return null; } - return CountryEmojiMap.TryGetValue(countryCode, out var emoji) ? emoji : null; + return CountryEmojiMap.GetValueOrDefault(countryCode); } } diff --git a/v2rayN/ServiceLib/Common/Extension.cs b/v2rayN/ServiceLib/Common/Extension.cs index 1403d127..a5cfdc38 100644 --- a/v2rayN/ServiceLib/Common/Extension.cs +++ b/v2rayN/ServiceLib/Common/Extension.cs @@ -47,7 +47,7 @@ public static class Extension public static string TrimEx(this string? value) { - return value == null ? string.Empty : value.Trim(); + return value?.Trim() ?? string.Empty; } public static string RemovePrefix(this string value, char prefix) diff --git a/v2rayN/ServiceLib/Handler/ConfigHandler.cs b/v2rayN/ServiceLib/Handler/ConfigHandler.cs index 23286f30..57358a75 100644 --- a/v2rayN/ServiceLib/Handler/ConfigHandler.cs +++ b/v2rayN/ServiceLib/Handler/ConfigHandler.cs @@ -43,10 +43,10 @@ public static class ConfigHandler if (config.Inbound == null) { - config.Inbound = new List(); + config.Inbound = []; InItem inItem = new() { - Protocol = EInboundProtocol.socks.ToString(), + Protocol = nameof(EInboundProtocol.socks), LocalPort = 10808, UdpEnabled = true, SniffingEnabled = true, @@ -59,7 +59,7 @@ public static class ConfigHandler { if (config.Inbound.Count > 0) { - config.Inbound.First().Protocol = EInboundProtocol.socks.ToString(); + config.Inbound.First().Protocol = nameof(EInboundProtocol.socks); } } @@ -98,8 +98,8 @@ public static class ConfigHandler config.MsgUIItem ??= new(); config.UiItem ??= new(); - config.UiItem.MainColumnItem ??= new(); - config.UiItem.WindowSizeItem ??= new(); + config.UiItem.MainColumnItem ??= []; + config.UiItem.WindowSizeItem ??= []; if (config.UiItem.CurrentLanguage.IsNullOrEmpty()) { @@ -157,7 +157,7 @@ public static class ConfigHandler DownMbps = 100 }; config.ClashUIItem ??= new(); - config.ClashUIItem.ConnectionsColumnItem ??= new(); + config.ClashUIItem.ConnectionsColumnItem ??= []; config.SystemProxyItem ??= new(); config.WebDavItem ??= new(); config.CheckUpdateItem ??= new(); @@ -167,7 +167,7 @@ public static class ConfigHandler Length = "50-100", Interval = "10-20" }; - config.GlobalHotkeys ??= new(); + config.GlobalHotkeys ??= []; if (config.SystemProxyItem.SystemProxyExceptions.IsNullOrEmpty()) { @@ -1056,8 +1056,8 @@ public static class ConfigHandler return new Tuple(0, 0); } - List lstKeep = new(); - List lstRemove = new(); + List lstKeep = []; + List lstRemove = []; if (!config.GuiItem.KeepOlderDedupl) { lstProfile.Reverse(); @@ -1533,7 +1533,7 @@ public static class ConfigHandler } var countServers = 0; - List lstAdd = new(); + List lstAdd = []; var arrData = strData.Split(Environment.NewLine.ToCharArray()).Where(t => !t.IsNullOrEmpty()); if (isSub) { @@ -1629,7 +1629,7 @@ public static class ConfigHandler { lstProfiles = V2rayFmt.ResolveFullArray(strData, subRemarks); } - if (lstProfiles != null && lstProfiles.Count > 0) + if (lstProfiles is { Count: > 0 }) { var count = 0; foreach (var it in lstProfiles) diff --git a/v2rayN/ServiceLib/Handler/ConnectionHandler.cs b/v2rayN/ServiceLib/Handler/ConnectionHandler.cs index 6e8df9f8..a59421e8 100644 --- a/v2rayN/ServiceLib/Handler/ConnectionHandler.cs +++ b/v2rayN/ServiceLib/Handler/ConnectionHandler.cs @@ -80,14 +80,14 @@ public static class ConnectionHandler UseProxy = webProxy != null }); - List oneTime = new(); + List oneTime = []; for (var i = 0; i < 2; i++) { var timer = Stopwatch.StartNew(); await client.GetAsync(url, cts.Token).ConfigureAwait(false); timer.Stop(); oneTime.Add((int)timer.Elapsed.TotalMilliseconds); - await Task.Delay(100); + await Task.Delay(100, cts.Token); } responseTime = oneTime.Where(x => x > 0).OrderBy(x => x).FirstOrDefault(); } diff --git a/v2rayN/ServiceLib/Handler/Fmt/InnerFmt.cs b/v2rayN/ServiceLib/Handler/Fmt/InnerFmt.cs index c9ad5844..3099a243 100644 --- a/v2rayN/ServiceLib/Handler/Fmt/InnerFmt.cs +++ b/v2rayN/ServiceLib/Handler/Fmt/InnerFmt.cs @@ -185,7 +185,7 @@ public class InnerFmt return null; } // Check Enum.IsDefined - if (!Enum.IsDefined(typeof(EConfigType), profileItem.ConfigType)) + if (!Enum.IsDefined(profileItem.ConfigType)) { return null; } diff --git a/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs b/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs index 62b36e07..7edd0939 100644 --- a/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs +++ b/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs @@ -71,7 +71,7 @@ public class SocksFmt : BaseFmt return null; } var arr21 = arr1.First().Split(':'); - var indexPort = arr1.Last().LastIndexOf(":"); + var indexPort = arr1.Last().LastIndexOf(':'); if (arr21.Length != 2 || indexPort < 0) { return null; diff --git a/v2rayN/ServiceLib/Handler/SubscriptionHandler.cs b/v2rayN/ServiceLib/Handler/SubscriptionHandler.cs index 4edd6c72..22740842 100644 --- a/v2rayN/ServiceLib/Handler/SubscriptionHandler.cs +++ b/v2rayN/ServiceLib/Handler/SubscriptionHandler.cs @@ -133,12 +133,12 @@ public static class SubscriptionHandler if (!url.Contains("target=")) { - url += string.Format("&target={0}", item.ConvertTarget); + url += $"&target={item.ConvertTarget}"; } if (!url.Contains("config=")) { - url += string.Format("&config={0}", Global.SubConvertConfig.FirstOrDefault()); + url += $"&config={Global.SubConvertConfig.FirstOrDefault()}"; } } diff --git a/v2rayN/ServiceLib/Manager/AppManager.cs b/v2rayN/ServiceLib/Manager/AppManager.cs index b532ea16..203c0417 100644 --- a/v2rayN/ServiceLib/Manager/AppManager.cs +++ b/v2rayN/ServiceLib/Manager/AppManager.cs @@ -268,7 +268,7 @@ public sealed class AppManager .ToListAsync(); var itemMap = items.ToDictionary(it => it.IndexId); - return idList.Select(id => itemMap.GetValueOrDefault(id)) + return idList.Select(itemMap.GetValueOrDefault) .Where(item => item != null) .ToList(); } diff --git a/v2rayN/ServiceLib/Manager/ClashApiManager.cs b/v2rayN/ServiceLib/Manager/ClashApiManager.cs index 313060db..05232e5a 100644 --- a/v2rayN/ServiceLib/Manager/ClashApiManager.cs +++ b/v2rayN/ServiceLib/Manager/ClashApiManager.cs @@ -45,19 +45,14 @@ public sealed class ClashApiManager { await GetClashProxiesAsync(); } - lstProxy = new List(); - foreach (var kv in _proxies ?? []) - { - if (Global.notAllowTestType.Contains(kv.Value.type?.ToLower())) - { - continue; - } - lstProxy.Add(new ClashProxyModel() - { - Name = kv.Value.name, - Type = kv.Value.type?.ToLower(), - }); - } + lstProxy = []; + lstProxy.AddRange(from kv in _proxies ?? [] + where !Global.notAllowTestType.Contains(kv.Value.type?.ToLower()) + select new ClashProxyModel() + { + Name = kv.Value.name, + Type = kv.Value.type?.ToLower(), + }); } if (lstProxy is not { Count: > 0 }) diff --git a/v2rayN/ServiceLib/Manager/GroupProfileManager.cs b/v2rayN/ServiceLib/Manager/GroupProfileManager.cs index 8a7389a0..1740960a 100644 --- a/v2rayN/ServiceLib/Manager/GroupProfileManager.cs +++ b/v2rayN/ServiceLib/Manager/GroupProfileManager.cs @@ -9,7 +9,7 @@ public class GroupProfileManager public static async Task HasCycle(string? indexId, ProtocolExtraItem? extraInfo) { - return await HasCycle(indexId, extraInfo, new HashSet(), new HashSet()); + return await HasCycle(indexId, extraInfo, [], []); } private static async Task HasCycle(string? indexId, ProtocolExtraItem? extraInfo, HashSet visited, HashSet stack) @@ -55,7 +55,7 @@ public class GroupProfileManager var childItems = await AppManager.Instance.GetProfileItemsByIndexIds(childIds); foreach (var childItem in childItems) { - if (await HasCycle(childItem.IndexId, childItem?.GetProtocolExtra(), visited, stack)) + if (await HasCycle(childItem.IndexId, childItem.GetProtocolExtra(), visited, stack)) { return true; } @@ -71,7 +71,7 @@ public class GroupProfileManager public static async Task<(List Items, ProtocolExtraItem? Extra)> GetChildProfileItems(ProfileItem profileItem) { - var protocolExtra = profileItem?.GetProtocolExtra(); + var protocolExtra = profileItem.GetProtocolExtra(); return (await GetChildProfileItemsByProtocolExtra(protocolExtra), protocolExtra); } diff --git a/v2rayN/ServiceLib/Manager/ProfileExManager.cs b/v2rayN/ServiceLib/Manager/ProfileExManager.cs index cbe90a09..f09e52e0 100644 --- a/v2rayN/ServiceLib/Manager/ProfileExManager.cs +++ b/v2rayN/ServiceLib/Manager/ProfileExManager.cs @@ -111,7 +111,7 @@ public class ProfileExManager public async Task ClearAll() { await SQLiteHelper.Instance.ExecuteAsync($"delete from ProfileExItem "); - _lstProfileEx = new(); + _lstProfileEx = []; } public async Task SaveTo() @@ -182,6 +182,6 @@ public class ProfileExManager { return 0; } - return _lstProfileEx.Max(t => t == null ? 0 : t.Sort); + return _lstProfileEx.Max(t => t?.Sort ?? 0); } } diff --git a/v2rayN/ServiceLib/Manager/StatisticsManager.cs b/v2rayN/ServiceLib/Manager/StatisticsManager.cs index 1e439a7f..f2452584 100644 --- a/v2rayN/ServiceLib/Manager/StatisticsManager.cs +++ b/v2rayN/ServiceLib/Manager/StatisticsManager.cs @@ -45,7 +45,7 @@ public class StatisticsManager { await SQLiteHelper.Instance.ExecuteAsync($"delete from ServerStatItem "); _serverStatItem = null; - _lstServerStat = new(); + _lstServerStat = []; } public async Task SaveTo() diff --git a/v2rayN/ServiceLib/Models/CoreConfigs/V2rayConfig.cs b/v2rayN/ServiceLib/Models/CoreConfigs/V2rayConfig.cs index cd5b68a0..2363aece 100644 --- a/v2rayN/ServiceLib/Models/CoreConfigs/V2rayConfig.cs +++ b/v2rayN/ServiceLib/Models/CoreConfigs/V2rayConfig.cs @@ -136,7 +136,7 @@ public class Outboundsettings4Ray public Response4Ray? response { get; set; } - public string domainStrategy { get; set; } + public string? domainStrategy { get; set; } public int? userLevel { get; set; } diff --git a/v2rayN/ServiceLib/Models/Dto/RetResult.cs b/v2rayN/ServiceLib/Models/Dto/RetResult.cs index 3d6c9345..2cb520e1 100644 --- a/v2rayN/ServiceLib/Models/Dto/RetResult.cs +++ b/v2rayN/ServiceLib/Models/Dto/RetResult.cs @@ -1,26 +1,16 @@ namespace ServiceLib.Models.Dto; -public class RetResult +public class RetResult(bool success, string? msg, object? data) { - public bool Success { get; set; } - public string? Msg { get; set; } - public object? Data { get; set; } - - public RetResult(bool success = false) + public RetResult(bool success = false) : this(success, null, null) { - Success = success; } - public RetResult(bool success, string? msg) + public RetResult(bool success, string? msg) : this(success, msg, null) { - Success = success; - Msg = msg; } - public RetResult(bool success, string? msg, object? data) - { - Success = success; - Msg = msg; - Data = data; - } + public bool Success { get; set; } = success; + public string? Msg { get; set; } = msg; + public object? Data { get; set; } = data; } diff --git a/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs b/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs index b9fcc126..0f5887a8 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs @@ -3,16 +3,10 @@ namespace ServiceLib.Services.CoreConfig; /// /// Core configuration file processing class /// -public class CoreConfigClashService +public class CoreConfigClashService(Config config) { - private Config _config; private static readonly string _tag = "CoreConfigClashService"; - public CoreConfigClashService(Config config) - { - _config = config; - } - public async Task GenerateClientCustomConfig(ProfileItem node, string? fileName) { var ret = new RetResult(); @@ -56,7 +50,7 @@ public class CoreConfigClashService var tagYamlStr1 = "!"; var tagYamlStr2 = "__strn__"; var tagYamlStr3 = "!!str"; - var txtFile = File.ReadAllText(addressFileName); + var txtFile = await File.ReadAllTextAsync(addressFileName); txtFile = txtFile.Replace(tagYamlStr1, tagYamlStr2); //YAML anchors @@ -75,13 +69,13 @@ public class CoreConfigClashService //mixed-port fileContent["mixed-port"] = AppManager.Instance.GetLocalPort(EInboundProtocol.socks); //log-level - fileContent["log-level"] = GetLogLevel(_config.CoreBasicItem.Loglevel); + fileContent["log-level"] = GetLogLevel(config.CoreBasicItem.Loglevel); //external-controller fileContent["external-controller"] = $"{Global.Loopback}:{AppManager.Instance.StatePort2}"; fileContent.Remove("secret"); //allow-lan - if (_config.Inbound.First().AllowLANConn) + if (config.Inbound.First().AllowLANConn) { fileContent["allow-lan"] = "true"; fileContent["bind-address"] = "*"; @@ -92,23 +86,23 @@ public class CoreConfigClashService } //ipv6 - fileContent["ipv6"] = _config.ClashUIItem.EnableIPv6; + fileContent["ipv6"] = config.ClashUIItem.EnableIPv6; //mode if (!fileContent.ContainsKey("mode")) { - fileContent["mode"] = ERuleMode.Rule.ToString().ToLower(); + fileContent["mode"] = nameof(ERuleMode.Rule).ToLower(); } else { - if (_config.ClashUIItem.RuleMode != ERuleMode.Unchanged) + if (config.ClashUIItem.RuleMode != ERuleMode.Unchanged) { - fileContent["mode"] = _config.ClashUIItem.RuleMode.ToString().ToLower(); + fileContent["mode"] = config.ClashUIItem.RuleMode.ToString().ToLower(); } } //enable tun mode - if (_config.TunModeItem.EnableTun) + if (config.TunModeItem.EnableTun) { var tun = EmbedUtils.GetEmbedText(Global.ClashTunYaml); if (tun.IsNotEmpty()) @@ -156,7 +150,7 @@ public class CoreConfigClashService private async Task MixinContent(Dictionary fileContent, ProfileItem node) { - if (!_config.ClashUIItem.EnableMixinContent) + if (!config.ClashUIItem.EnableMixinContent) { return; } @@ -177,7 +171,7 @@ public class CoreConfigClashService } foreach (var item in mixinContent) { - if (!_config.TunModeItem.EnableTun && item.Key == "tun") + if (!config.TunModeItem.EnableTun && item.Key == "tun") { continue; } @@ -220,9 +214,8 @@ public class CoreConfigClashService return; } - if (!blRemoved && !fileContent.ContainsKey(key)) + if (!blRemoved && fileContent.TryAdd(key, value)) { - fileContent.Add(key, value); return; } var lstOri = (List)fileContent[key]; @@ -244,7 +237,7 @@ public class CoreConfigClashService } else { - lstValue.ForEach(item => lstOri.Add(item)); + lstValue.ForEach(lstOri.Add); } } diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/CoreConfigSingboxService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/CoreConfigSingboxService.cs index 9cddbfe8..df8ae76c 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/CoreConfigSingboxService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/CoreConfigSingboxService.cs @@ -153,7 +153,7 @@ public partial class CoreConfigSingboxService(CoreConfigContext context) { listen = Global.Loopback, listen_port = port, - type = EInboundProtocol.mixed.ToString(), + type = nameof(EInboundProtocol.mixed), }; inbound.tag = inbound.type + inbound.listen_port.ToString(); _coreConfig.inbounds.Add(inbound); @@ -229,7 +229,7 @@ public partial class CoreConfigSingboxService(CoreConfigContext context) tag = $"{EInboundProtocol.mixed}{port}", listen = Global.Loopback, listen_port = port, - type = EInboundProtocol.mixed.ToString(), + type = nameof(EInboundProtocol.mixed), }); ApplyOutboundBindInterface(); ApplyOutboundSendThrough(); diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxConfigTemplateService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxConfigTemplateService.cs index 4fffe27c..8e573a21 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxConfigTemplateService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxConfigTemplateService.cs @@ -23,7 +23,7 @@ public partial class CoreConfigSingboxService } // Process outbounds - var customOutboundsNode = fullConfigTemplateNode["outbounds"] is JsonArray outbounds ? outbounds : []; + var customOutboundsNode = fullConfigTemplateNode["outbounds"] as JsonArray ?? []; foreach (var outbound in _coreConfig.outbounds) { if (outbound.type.ToLower() is "direct" or "block") @@ -42,9 +42,9 @@ public partial class CoreConfigSingboxService fullConfigTemplateNode["outbounds"] = customOutboundsNode; // Process endpoints - if (_coreConfig.endpoints != null && _coreConfig.endpoints.Count > 0) + if (_coreConfig.endpoints is { Count: > 0 }) { - var customEndpointsNode = fullConfigTemplateNode["endpoints"] is JsonArray endpoints ? endpoints : []; + var customEndpointsNode = fullConfigTemplateNode["endpoints"] as JsonArray ?? []; foreach (var endpoint in _coreConfig.endpoints) { if (endpoint.detour.IsNullOrEmpty() && !fullConfigTemplate.ProxyDetour.IsNullOrEmpty()) diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs index f5a7da4b..25db8b1c 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs @@ -26,7 +26,7 @@ public partial class CoreConfigSingboxService { var rules = JsonUtils.Deserialize>(routing.RuleSet) ?? []; - if (rules?.LastOrDefault() is { } lastRule && lastRule.OutboundTag == Global.DirectTag) + if (rules?.LastOrDefault() is { OutboundTag: Global.DirectTag } lastRule) { var noDomain = lastRule.Domain == null || lastRule.Domain.Count == 0; var noProcess = lastRule.Process == null || lastRule.Process.Count == 0; @@ -82,7 +82,7 @@ public partial class CoreConfigSingboxService if (simpleDnsItem.UseSystemHosts == true) { var systemHosts = Utils.GetSystemHosts(); - if (systemHosts != null && systemHosts.Count > 0) + if (systemHosts is { Count: > 0 }) { foreach (var host in systemHosts) { @@ -182,13 +182,13 @@ public partial class CoreConfigSingboxService { server = Global.SingboxRemoteDNSTag, strategy = Utils.DomainStrategy4Sbox(simpleDnsItem.Strategy4Proxy), - clash_mode = ERuleMode.Global.ToString() + clash_mode = nameof(ERuleMode.Global) }, new Rule4Sbox { server = Global.SingboxDirectDNSTag, strategy = Utils.DomainStrategy4Sbox(simpleDnsItem.Strategy4Freedom), - clash_mode = ERuleMode.Direct.ToString() + clash_mode = nameof(ERuleMode.Direct) } }); @@ -454,12 +454,12 @@ public partial class CoreConfigSingboxService dns4Sbox.rules.Insert(0, new() { server = tag, - clash_mode = ERuleMode.Direct.ToString() + clash_mode = nameof(ERuleMode.Direct) }); dns4Sbox.rules.Insert(0, new() { server = dns4Sbox.servers.Where(t => t.detour == Global.ProxyTag).Select(t => t.tag).FirstOrDefault() ?? "remote", - clash_mode = ERuleMode.Global.ToString() + clash_mode = nameof(ERuleMode.Global) }); var finalDnsAddress = string.IsNullOrEmpty(dnsItem?.DomainDNSAddress) ? Global.DomainPureIPDNSAddress.FirstOrDefault() : dnsItem?.DomainDNSAddress; diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxInboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxInboundService.cs index 3aa06d4e..1eeffa43 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxInboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxInboundService.cs @@ -15,8 +15,8 @@ public partial class CoreConfigSingboxService { var inbound = new Inbound4Sbox() { - type = EInboundProtocol.mixed.ToString(), - tag = EInboundProtocol.socks.ToString(), + type = nameof(EInboundProtocol.mixed), + tag = nameof(EInboundProtocol.socks), listen = Global.Loopback, }; _coreConfig.inbounds.Add(inbound); @@ -87,7 +87,7 @@ public partial class CoreConfigSingboxService var inbound = JsonUtils.DeepCopy(inItem); inbound.tag = protocol.ToString(); inbound.listen_port = inItem.listen_port + (int)protocol; - inbound.type = EInboundProtocol.mixed.ToString(); + inbound.type = nameof(EInboundProtocol.mixed); return inbound; } } diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs index 31c02a81..19171b32 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs @@ -730,8 +730,8 @@ public partial class CoreConfigSingboxService { return; } - var outbounds = servers.Where(s => s is Outbound4Sbox).Cast().ToList(); - var endpoints = servers.Where(s => s is Endpoints4Sbox).Cast().ToList(); + var outbounds = servers.OfType().ToList(); + var endpoints = servers.OfType().ToList(); singboxConfig.endpoints ??= []; if (prepend) { diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs index 2a1df21f..5ea1f741 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs @@ -193,12 +193,12 @@ public partial class CoreConfigSingboxService _coreConfig.route.rules.Add(new() { outbound = Global.DirectTag, - clash_mode = ERuleMode.Direct.ToString() + clash_mode = nameof(ERuleMode.Direct) }); _coreConfig.route.rules.Add(new() { outbound = Global.ProxyTag, - clash_mode = ERuleMode.Global.ToString() + clash_mode = nameof(ERuleMode.Global) }); var domainStrategy = _config.RoutingBasicItem.DomainStrategy4Singbox.NullIfEmpty(); diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRulesetService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRulesetService.cs index bb4c4b3a..d38e9945 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRulesetService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRulesetService.cs @@ -18,15 +18,15 @@ public partial class CoreConfigSingboxService //convert route geosite & geoip to ruleset foreach (var rule in _coreConfig.route.rules.Where(t => t.geosite?.Count > 0).ToList() ?? []) { - rule.rule_set ??= new List(); - rule.rule_set.AddRange(rule?.geosite?.Select(t => $"{geosite}-{t}").ToList()); + rule.rule_set ??= []; + rule.rule_set.AddRange(rule?.geosite?.Select(t => $"{geosite}-{t}").ToList() ?? []); rule.geosite = null; AddRuleSets(ruleSets, rule.rule_set); } foreach (var rule in _coreConfig.route.rules.Where(t => t.geoip?.Count > 0).ToList() ?? []) { - rule.rule_set ??= new List(); - rule.rule_set.AddRange(rule?.geoip?.Select(t => $"{geoip}-{t}").ToList()); + rule.rule_set ??= []; + rule.rule_set.AddRange(rule?.geoip?.Select(t => $"{geoip}-{t}").ToList() ?? []); rule.geoip = null; AddRuleSets(ruleSets, rule.rule_set); } @@ -34,14 +34,14 @@ public partial class CoreConfigSingboxService //convert dns geosite & geoip to ruleset foreach (var rule in _coreConfig.dns?.rules.Where(t => t.geosite?.Count > 0).ToList() ?? []) { - rule.rule_set ??= new List(); - rule.rule_set.AddRange(rule?.geosite?.Select(t => $"{geosite}-{t}").ToList()); + rule.rule_set ??= []; + rule.rule_set.AddRange(rule?.geosite?.Select(t => $"{geosite}-{t}").ToList() ?? []); rule.geosite = null; } foreach (var rule in _coreConfig.dns?.rules.Where(t => t.geoip?.Count > 0).ToList() ?? []) { - rule.rule_set ??= new List(); - rule.rule_set.AddRange(rule?.geoip?.Select(t => $"{geoip}-{t}").ToList()); + rule.rule_set ??= []; + rule.rule_set.AddRange(rule?.geoip?.Select(t => $"{geoip}-{t}").ToList() ?? []); rule.geoip = null; } foreach (var dnsRule in _coreConfig.dns?.rules.Where(t => t.rule_set?.Count > 0).ToList() ?? []) diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/CoreConfigV2rayService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/CoreConfigV2rayService.cs index 9e762c05..4dbc72e8 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/CoreConfigV2rayService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/CoreConfigV2rayService.cs @@ -165,7 +165,7 @@ public partial class CoreConfigV2rayService(CoreConfigContext context) { listen = Global.Loopback, port = port, - protocol = EInboundProtocol.mixed.ToString(), + protocol = nameof(EInboundProtocol.mixed), settings = new Inboundsettings4Ray() { udp = true, @@ -270,7 +270,7 @@ public partial class CoreConfigV2rayService(CoreConfigContext context) tag = $"{EInboundProtocol.socks}{port}", listen = Global.Loopback, port = port, - protocol = EInboundProtocol.mixed.ToString(), + protocol = nameof(EInboundProtocol.mixed), settings = new Inboundsettings4Ray() { udp = true, diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayBalancerService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayBalancerService.cs index 78050667..a6955eb4 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayBalancerService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayBalancerService.cs @@ -56,7 +56,7 @@ public partial class CoreConfigV2rayService } else { - _coreConfig.burstObservatory.subjectSelector ??= new(); + _coreConfig.burstObservatory.subjectSelector ??= []; _coreConfig.burstObservatory.subjectSelector.Add(baseTagName); } } @@ -75,7 +75,7 @@ public partial class CoreConfigV2rayService } else { - _coreConfig.observatory.subjectSelector ??= new(); + _coreConfig.observatory.subjectSelector ??= []; _coreConfig.observatory.subjectSelector.Add(baseTagName); } } @@ -106,7 +106,7 @@ public partial class CoreConfigV2rayService tag = balancerTag, fallbackTag = multipleLoad == EMultipleLoad.Fallback ? Global.DirectTag : null, }; - _coreConfig.routing.balancers ??= new(); + _coreConfig.routing.balancers ??= []; _coreConfig.routing.balancers.Add(balancer); } } diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayConfigTemplateService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayConfigTemplateService.cs index a218ac13..d7a6a9b5 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayConfigTemplateService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayConfigTemplateService.cs @@ -46,10 +46,7 @@ public partial class CoreConfigV2rayService } // Ensure routing node exists - if (fullConfigTemplateNode["routing"] == null) - { - fullConfigTemplateNode["routing"] = new JsonObject(); - } + fullConfigTemplateNode["routing"] ??= new JsonObject(); // Handle balancers - append instead of override if (fullConfigTemplateNode["routing"]["balancers"] is JsonArray customBalancersNode) diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayDnsService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayDnsService.cs index abb3e134..887d2c18 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayDnsService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayDnsService.cs @@ -34,7 +34,7 @@ public partial class CoreConfigV2rayService return; } var simpleDnsItem = context.SimpleDnsItem; - var dnsItem = _coreConfig.dns is Dns4Ray dns4Ray ? dns4Ray : new Dns4Ray(); + var dnsItem = _coreConfig.dns as Dns4Ray ?? new Dns4Ray(); var strategy4Freedom = simpleDnsItem?.Strategy4Freedom ?? Global.AsIs; //Outbound Freedom domainStrategy @@ -246,7 +246,7 @@ public partial class CoreConfigV2rayService var useDirectDns = false; - if (rules?.LastOrDefault() is { } lastRule && lastRule.OutboundTag == Global.DirectTag) + if (rules?.LastOrDefault() is { OutboundTag: Global.DirectTag } lastRule) { var noDomain = lastRule.Domain == null || lastRule.Domain.Count == 0; var noProcess = lastRule.Process == null || lastRule.Process.Count == 0; @@ -384,9 +384,11 @@ public partial class CoreConfigV2rayService var outbound = _coreConfig.outbounds.FirstOrDefault(t => t is { protocol: "freedom", tag: Global.DirectTag }); if (outbound != null) { - outbound.settings = new(); - outbound.settings.domainStrategy = domainStrategy4Freedom; - outbound.settings.userLevel = 0; + outbound.settings = new() + { + domainStrategy = domainStrategy4Freedom, + userLevel = 0, + }; } } diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayInboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayInboundService.cs index 7f950a83..b0d5e287 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayInboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayInboundService.cs @@ -145,7 +145,7 @@ public partial class CoreConfigV2rayService } inbound.tag = protocol.ToString(); inbound.port = inItem.LocalPort + (int)protocol; - inbound.protocol = EInboundProtocol.mixed.ToString(); + inbound.protocol = nameof(EInboundProtocol.mixed); inbound.settings.udp = inItem.UdpEnabled; inbound.sniffing.enabled = inItem.SniffingEnabled; inbound.sniffing.destOverride = inItem.DestOverride; diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs index 6441dcd9..a94dbcba 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs @@ -243,9 +243,9 @@ public partial class CoreConfigV2rayService version = 2, address = _node.Address, port = _node.Port, + vnext = null, + servers = null, }; - outbound.settings.vnext = null; - outbound.settings.servers = null; break; } case EConfigType.WireGuard: @@ -450,14 +450,13 @@ public partial class CoreConfigV2rayService KcpSettings4Ray kcpSettings = new() { mtu = kcpMtu, - tti = _config.KcpItem.Tti + tti = _config.KcpItem.Tti, + uplinkCapacity = _config.KcpItem.UplinkCapacity, + downlinkCapacity = _config.KcpItem.DownlinkCapacity, + cwndMultiplier = _config.KcpItem.CwndMultiplier, + maxSendingWindow = _config.KcpItem.MaxSendingWindow, }; - kcpSettings.uplinkCapacity = _config.KcpItem.UplinkCapacity; - kcpSettings.downlinkCapacity = _config.KcpItem.DownlinkCapacity; - - kcpSettings.cwndMultiplier = _config.KcpItem.CwndMultiplier; - kcpSettings.maxSendingWindow = _config.KcpItem.MaxSendingWindow; var kcpFinalmask = new Finalmask4Ray(); if (Global.KcpHeaderMaskMap.TryGetValue(headerType, out var header)) { @@ -531,7 +530,7 @@ public partial class CoreConfigV2rayService break; //xhttp case nameof(ETransport.xhttp): - streamSettings.network = ETransport.xhttp.ToString(); + streamSettings.network = nameof(ETransport.xhttp); XhttpSettings4Ray xhttpSettings = new(); if (path.IsNotEmpty()) diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayStatisticService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayStatisticService.cs index 6364b7bd..0e51c9fe 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayStatisticService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayStatisticService.cs @@ -6,7 +6,7 @@ public partial class CoreConfigV2rayService { if (_config.GuiItem.EnableStatistics || _config.GuiItem.DisplayRealTimeSpeed) { - var tag = EInboundProtocol.api.ToString(); + const string tag = nameof(EInboundProtocol.api); Metrics4Ray apiObj = new(); Policy4Ray policyObj = new(); SystemPolicy4Ray policySystemSetting = new(); diff --git a/v2rayN/ServiceLib/Services/SpeedtestService.cs b/v2rayN/ServiceLib/Services/SpeedtestService.cs index 11778b22..a66fef63 100644 --- a/v2rayN/ServiceLib/Services/SpeedtestService.cs +++ b/v2rayN/ServiceLib/Services/SpeedtestService.cs @@ -7,7 +7,7 @@ public class SpeedtestService(Config config, Func updateF private static readonly string _tag = "SpeedtestService"; private readonly Config? _config = config; private readonly Func? _updateFunc = updateFunc; - private static readonly ConcurrentBag _lstExitLoop = new(); + private static readonly ConcurrentBag _lstExitLoop = []; private readonly int _speedTestPageSize = config.SpeedTestItem.SpeedTestPageSize ?? Global.SpeedTestPageSize; private readonly TimeSpan _delayInterval = TimeSpan.FromSeconds(config.SpeedTestItem.SpeedTestDelayInterval ?? 1); @@ -33,7 +33,7 @@ public class SpeedtestService(Config config, Func updateF private static bool ShouldStopTest(string exitLoopKey) { - return !_lstExitLoop.Any(p => p == exitLoopKey); + return _lstExitLoop.All(p => p != exitLoopKey); } private async Task RunAsync(ESpeedActionType actionType, List selecteds) @@ -173,7 +173,7 @@ public class SpeedtestService(Config config, Func updateF } var lstTest = GetTestBatchItem(lstSelected, pageSize); - List lstFailed = new(); + List lstFailed = []; foreach (var lst in lstTest) { var ret = await RunRealPingAsync(lst, exitLoopKey); @@ -219,7 +219,7 @@ public class SpeedtestService(Config config, Func updateF } await Task.Delay(1000); - List tasks = new(); + List tasks = []; foreach (var it in selecteds) { if (!it.AllowTest) @@ -262,7 +262,7 @@ public class SpeedtestService(Config config, Func updateF } var lstTest = GetTestBatchItem(lstSelected, pageSize); - List lstFailed = new(); + List lstFailed = []; foreach (var lst in lstTest) { var ret = await RunUdpTestAsync(lst, exitLoopKey); @@ -300,7 +300,7 @@ public class SpeedtestService(Config config, Func updateF } await Task.Delay(1000); - List tasks = new(); + List tasks = []; foreach (var it in selecteds) { if (!it.AllowTest) @@ -338,7 +338,7 @@ public class SpeedtestService(Config config, Func updateF { using var concurrencySemaphore = new SemaphoreSlim(concurrencyCount); var downloadHandle = new DownloadService(); - List tasks = new(); + List tasks = []; foreach (var it in selecteds) { if (ShouldStopTest(exitLoopKey)) @@ -489,7 +489,7 @@ public class SpeedtestService(Config config, Func updateF private List> GetTestBatchItem(List lstSelected, int pageSize) { - List> lstTest = new(); + List> lstTest = []; var lst1 = lstSelected.Where(t => t.CoreType == ECoreType.Xray).ToList(); var lst2 = lstSelected.Where(t => t.CoreType == ECoreType.sing_box).ToList(); diff --git a/v2rayN/ServiceLib/Services/WindowsJobService.cs b/v2rayN/ServiceLib/Services/WindowsJobService.cs index 5bc8f276..c54637fb 100644 --- a/v2rayN/ServiceLib/Services/WindowsJobService.cs +++ b/v2rayN/ServiceLib/Services/WindowsJobService.cs @@ -31,8 +31,7 @@ public sealed class WindowsJobService : IDisposable if (!SetInformationJobObject(handle, JobObjectInfoType.ExtendedLimitInformation, extendedInfoPtr, (uint)length)) { - throw new Exception(string.Format("Unable to set information. Error: {0}", - Marshal.GetLastWin32Error())); + throw new Exception($"Unable to set information. Error: {Marshal.GetLastWin32Error()}"); } } finally diff --git a/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs b/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs index 7d4d0948..7a55dde0 100644 --- a/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs @@ -216,7 +216,7 @@ public class AddGroupServerViewModel : MyReactiveObject NoticeManager.Instance.Enqueue(ResUI.PleaseAddAtLeastOneServer); return; } - SelectedSource.CoreType = CoreType.IsNullOrEmpty() ? ECoreType.Xray : (ECoreType)Enum.Parse(typeof(ECoreType), CoreType); + SelectedSource.CoreType = CoreType.IsNullOrEmpty() ? ECoreType.Xray : Enum.Parse(CoreType); if (SelectedSource.CoreType is not (ECoreType.Xray or ECoreType.sing_box) || SelectedSource.ConfigType is not (EConfigType.ProxyChain or EConfigType.PolicyGroup)) { diff --git a/v2rayN/ServiceLib/ViewModels/AddServer2ViewModel.cs b/v2rayN/ServiceLib/ViewModels/AddServer2ViewModel.cs index cbc97642..6df0e049 100644 --- a/v2rayN/ServiceLib/ViewModels/AddServer2ViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/AddServer2ViewModel.cs @@ -50,7 +50,7 @@ public class AddServer2ViewModel : MyReactiveObject NoticeManager.Instance.Enqueue(ResUI.FillServerAddressCustom); return; } - SelectedSource.CoreType = CoreType.IsNullOrEmpty() ? null : (ECoreType)Enum.Parse(typeof(ECoreType), CoreType); + SelectedSource.CoreType = CoreType.IsNullOrEmpty() ? null : Enum.Parse(CoreType); if (await ConfigHandler.EditCustomServer(_config, SelectedSource) == 0) { diff --git a/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs b/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs index 07de23f2..fb464870 100644 --- a/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs @@ -69,7 +69,7 @@ public class ClashConnectionsViewModel : MyReactiveObject var dtNow = DateTime.Now; var lstModel = new List(); - foreach (var item in connections ?? new()) + foreach (var item in connections ?? []) { var host = $"{(item.metadata.host.IsNullOrEmpty() ? item.metadata.destinationIP : item.metadata.host)}:{item.metadata.destinationPort}"; if (HostFilter.IsNotEmpty() && !host.Contains(HostFilter)) @@ -85,7 +85,7 @@ public class ClashConnectionsViewModel : MyReactiveObject Host = host, Time = (dtNow - item.start).TotalSeconds < 0 ? 1 : (dtNow - item.start).TotalSeconds, Elapsed = (dtNow - item.start).ToString(@"hh\:mm\:ss"), - Chain = $"{item.rule} , {string.Join("->", item.chains ?? new())}" + Chain = $"{item.rule} , {string.Join("->", item.chains ?? [])}" }; lstModel.Add(model); diff --git a/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs b/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs index 7da8ad42..84442e57 100644 --- a/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs @@ -67,7 +67,7 @@ public class ClashProxiesViewModel : MyReactiveObject this.WhenAnyValue( x => x.SelectedGroup, y => y != null && y.Name.IsNotEmpty()) - .Subscribe(c => RefreshProxyDetails(c)); + .Subscribe(RefreshProxyDetails); this.WhenAnyValue( x => x.RuleModeSelected, @@ -77,7 +77,7 @@ public class ClashProxiesViewModel : MyReactiveObject this.WhenAnyValue( x => x.SortingSelected, y => y >= 0) - .Subscribe(c => DoSortingSelected(c)); + .Subscribe(DoSortingSelected); this.WhenAnyValue( x => x.AutoRefresh, @@ -188,15 +188,14 @@ public class ClashProxiesViewModel : MyReactiveObject ProxyGroups.Clear(); var proxyGroups = ClashApiManager.Instance.GetClashProxyGroups(); - if (proxyGroups != null && proxyGroups.Count > 0) + if (proxyGroups is { Count: > 0 }) { foreach (var it in proxyGroups) { - if (it.name.IsNullOrEmpty() || !_proxies.ContainsKey(it.name)) + if (it.name.IsNullOrEmpty() || !_proxies.TryGetValue(it.name, out var item)) { continue; } - var item = _proxies[it.name]; if (!Global.allowSelectType.Contains(item.type.ToLower())) { continue; @@ -230,7 +229,7 @@ public class ClashProxiesViewModel : MyReactiveObject }); } - if (ProxyGroups != null && ProxyGroups.Count > 0) + if (ProxyGroups is { Count: > 0 }) { if (selectedName != null && ProxyGroups.Any(t => t.Name == selectedName)) { diff --git a/v2rayN/ServiceLib/ViewModels/DNSSettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/DNSSettingViewModel.cs index 13571616..b484cd24 100644 --- a/v2rayN/ServiceLib/ViewModels/DNSSettingViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/DNSSettingViewModel.cs @@ -56,7 +56,7 @@ public class DNSSettingViewModel : MyReactiveObject }); this.WhenAnyValue(x => x.RayCustomDNSEnableCompatible, x => x.SBCustomDNSEnableCompatible) - .Select(x => !(x.Item1 && x.Item2)) + .Select(x => x is not { Item1: true, Item2: true }) .ToPropertyEx(this, x => x.IsSimpleDNSEnabled); _ = Init(); diff --git a/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs index 39a0fcd4..adc6d124 100644 --- a/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs @@ -236,12 +236,9 @@ public class OptionSettingViewModel : MyReactiveObject private async Task InitCoreType() { - if (_config.CoreTypeItem == null) - { - _config.CoreTypeItem = new List(); - } + _config.CoreTypeItem ??= []; - foreach (EConfigType it in Enum.GetValues(typeof(EConfigType))) + foreach (var it in Enum.GetValues()) { if (_config.CoreTypeItem.FindIndex(t => t.ConfigType == it) >= 0) { @@ -458,7 +455,7 @@ public class OptionSettingViewModel : MyReactiveObject default: continue; } - item.CoreType = (ECoreType)Enum.Parse(typeof(ECoreType), type); + item.CoreType = Enum.Parse(type); } await Task.CompletedTask; } diff --git a/v2rayN/ServiceLib/ViewModels/ProfilesSelectViewModel.cs b/v2rayN/ServiceLib/ViewModels/ProfilesSelectViewModel.cs index a4d9b298..f0d40024 100644 --- a/v2rayN/ServiceLib/ViewModels/ProfilesSelectViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/ProfilesSelectViewModel.cs @@ -5,13 +5,10 @@ public class ProfilesSelectViewModel : MyReactiveObject #region private prop private string _serverFilter = string.Empty; - private Dictionary _dicHeaderSort = new(); + private readonly Dictionary _dicHeaderSort = new(); private string _subIndexId = string.Empty; // ConfigType filter state: default include-mode with all types selected - private List _filterConfigTypes = new(); - - private bool _filterExclude = false; #endregion private prop @@ -33,18 +30,11 @@ public class ProfilesSelectViewModel : MyReactiveObject public string ServerFilter { get; set; } // Include/Exclude filter for ConfigType - public List FilterConfigTypes - { - get => _filterConfigTypes; - set => this.RaiseAndSetIfChanged(ref _filterConfigTypes, value); - } + [Reactive] + public List FilterConfigTypes { get; set; } [Reactive] - public bool FilterExclude - { - get => _filterExclude; - set => this.RaiseAndSetIfChanged(ref _filterExclude, value); - } + public bool FilterExclude { get; set; } #endregion ObservableCollection @@ -91,11 +81,11 @@ public class ProfilesSelectViewModel : MyReactiveObject try { FilterExclude = false; - FilterConfigTypes = Enum.GetValues(typeof(EConfigType)).Cast().ToList(); + FilterConfigTypes = Enum.GetValues().ToList(); } catch { - FilterConfigTypes = new(); + FilterConfigTypes = []; } await RefreshSubscriptions(); @@ -165,14 +155,7 @@ public class ProfilesSelectViewModel : MyReactiveObject if (lstModel.Count > 0) { var selected = lstModel.FirstOrDefault(t => t.IndexId == _config.IndexId); - if (selected != null) - { - SelectedProfile = selected; - } - else - { - SelectedProfile = lstModel.First(); - } + SelectedProfile = selected ?? lstModel.First(); } await _updateView?.Invoke(EViewAction.DispatcherRefreshServersBiz, null); @@ -213,7 +196,7 @@ public class ProfilesSelectViewModel : MyReactiveObject }).OrderBy(t => t.Sort).ToList(); // Apply ConfigType filter (include or exclude) - if (FilterConfigTypes != null && FilterConfigTypes.Count > 0) + if (FilterConfigTypes is { Count: > 0 }) { if (FilterExclude) { @@ -321,7 +304,7 @@ public class ProfilesSelectViewModel : MyReactiveObject // External setter for ConfigType filter public void SetConfigTypeFilter(IEnumerable types, bool exclude = false) { - FilterConfigTypes = types?.Distinct().ToList() ?? new List(); + FilterConfigTypes = types?.Distinct().ToList() ?? []; FilterExclude = exclude; } diff --git a/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs b/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs index 1af0ac14..981dd250 100644 --- a/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs @@ -6,7 +6,7 @@ public class ProfilesViewModel : MyReactiveObject private List _lstProfile; private string _serverFilter = string.Empty; - private Dictionary _dicHeaderSort = new(); + private readonly Dictionary _dicHeaderSort = new(); private SpeedtestService? _speedtestService; private string? _pendingSelectIndexId; @@ -190,7 +190,7 @@ public class ProfilesViewModel : MyReactiveObject }, canEditRemove); SortServerResultCmd = ReactiveCommand.CreateFromTask(async () => { - await SortServer(EServerColName.DelayVal.ToString()); + await SortServer(nameof(EServerColName.DelayVal)); }); RemoveInvalidServerResultCmd = ReactiveCommand.CreateFromTask(async () => { diff --git a/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs b/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs index e984ab64..788e6e92 100644 --- a/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs @@ -73,7 +73,7 @@ public class RoutingRuleDetailsViewModel : MyReactiveObject } SelectedSource.Protocol = ProtocolItems?.ToList(); SelectedSource.InboundTag = InboundTagItems?.ToList(); - SelectedSource.RuleType = RuleType.IsNullOrEmpty() ? null : (ERuleType)Enum.Parse(typeof(ERuleType), RuleType); + SelectedSource.RuleType = RuleType.IsNullOrEmpty() ? null : Enum.Parse(RuleType); var hasRule = SelectedSource.Domain?.Count > 0 || SelectedSource.Ip?.Count > 0 diff --git a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs index 3baf79c6..172a907d 100644 --- a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs @@ -86,7 +86,7 @@ public class RoutingRuleSettingViewModel : MyReactiveObject SelectedSource = new(); SelectedRouting = routingItem; - _rules = routingItem.Id.IsNullOrEmpty() ? new() : JsonUtils.Deserialize>(SelectedRouting.RuleSet); + _rules = routingItem.Id.IsNullOrEmpty() ? [] : JsonUtils.Deserialize>(SelectedRouting.RuleSet); RefreshRulesItems(); } diff --git a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs index 0ce40dbb..b3199f12 100644 --- a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs @@ -313,9 +313,8 @@ public class StatusBarViewModel : MyReactiveObject } BlServers = true; - for (var k = 0; k < lstModel.Count; k++) + foreach (var it in lstModel) { - var it = lstModel[k]; var name = it.GetSummary(); var item = new ComboItem() { ID = it.IndexId, Text = name }; diff --git a/v2rayN/v2rayN.Desktop/App.axaml.cs b/v2rayN/v2rayN.Desktop/App.axaml.cs index c1c448cb..109dc6e7 100644 --- a/v2rayN/v2rayN.Desktop/App.axaml.cs +++ b/v2rayN/v2rayN.Desktop/App.axaml.cs @@ -72,14 +72,18 @@ public partial class App : Application private async void MenuAddServerViaClipboardClick(object? sender, EventArgs e) { - if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + try { - if (desktop.MainWindow != null) + if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime { MainWindow: not null }) { AppEvents.AddServerViaClipboardRequested.Publish(); await Task.Delay(1000); } } + catch (Exception ex) + { + Logging.SaveLog("MenuAddServerViaClipboardClick", ex); + } } private async void MenuExit_Click(object? sender, EventArgs e) diff --git a/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs b/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs index c84a2887..27a13dda 100644 --- a/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs +++ b/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs @@ -41,7 +41,7 @@ public class ThemeSettingViewModel : MyReactiveObject { _config.UiItem.CurrentTheme = CurrentTheme; ModifyTheme(); - ConfigHandler.SaveConfig(_config); + _ = ConfigHandler.SaveConfig(_config); } }); @@ -54,7 +54,7 @@ public class ThemeSettingViewModel : MyReactiveObject { _config.UiItem.CurrentFontSize = CurrentFontSize; ModifyFontSize(); - ConfigHandler.SaveConfig(_config); + _ = ConfigHandler.SaveConfig(_config); } }); @@ -67,7 +67,7 @@ public class ThemeSettingViewModel : MyReactiveObject { _config.UiItem.CurrentLanguage = CurrentLanguage; Thread.CurrentThread.CurrentUICulture = new(CurrentLanguage); - ConfigHandler.SaveConfig(_config); + _ = ConfigHandler.SaveConfig(_config); NoticeManager.Instance.Enqueue(ResUI.NeedRebootTips); } }); diff --git a/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml.cs b/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml.cs index f1624a6b..64260fae 100644 --- a/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/AddServer2Window.axaml.cs @@ -18,7 +18,7 @@ public partial class AddServer2Window : WindowBase btnCancel.Click += (s, e) => Close(); ViewModel = new AddServer2ViewModel(profileItem, UpdateViewHandler); - cmbCoreType.ItemsSource = Utils.GetEnumNames().Where(t => t != ECoreType.v2rayN.ToString()).ToList().AppendEmpty(); + cmbCoreType.ItemsSource = Utils.GetEnumNames().Where(t => t != nameof(ECoreType.v2rayN)).ToList().AppendEmpty(); this.WhenActivated(disposables => { diff --git a/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs index 90690c1e..b032e601 100644 --- a/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs @@ -112,7 +112,7 @@ public partial class ClashConnectionsView : ReactiveUserControl lvColumnItem = new(); + List lvColumnItem = []; foreach (var item2 in lstConnections.Columns) { if (item2.Tag == null) diff --git a/v2rayN/v2rayN.Desktop/Views/GlobalHotkeySettingWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/GlobalHotkeySettingWindow.axaml.cs index 599eba7e..197cdd37 100644 --- a/v2rayN/v2rayN.Desktop/Views/GlobalHotkeySettingWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/GlobalHotkeySettingWindow.axaml.cs @@ -5,7 +5,7 @@ namespace v2rayN.Desktop.Views; public partial class GlobalHotkeySettingWindow : WindowBase { - private readonly List _textBoxKeyEventItem = new(); + private readonly List _textBoxKeyEventItem = []; public GlobalHotkeySettingWindow() { diff --git a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs index ba568f1f..56457590 100644 --- a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs @@ -144,13 +144,13 @@ public partial class MainWindow : WindowBase AppEvents.ShutdownRequested .AsObservable() .ObserveOn(RxSchedulers.MainThreadScheduler) - .Subscribe(content => Shutdown(content)) + .Subscribe(Shutdown) .DisposeWith(disposables); AppEvents.ShowHideWindowRequested .AsObservable() .ObserveOn(RxSchedulers.MainThreadScheduler) - .Subscribe(blShow => ShowHideWindow(blShow)) + .Subscribe(ShowHideWindow) .DisposeWith(disposables); }); diff --git a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs index 39f318f1..3d9ddd57 100644 --- a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs @@ -447,7 +447,7 @@ public partial class ProfilesView : ReactiveUserControl { try { - List lvColumnItem = new(); + List lvColumnItem = []; foreach (var item2 in lstProfiles.Columns) { if (item2.Tag == null) diff --git a/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs index c5d9ef80..74af9a45 100644 --- a/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs @@ -47,10 +47,7 @@ public partial class StatusBarView : ReactiveUserControl switch (action) { case EViewAction.DispatcherRefreshIcon: - Dispatcher.UIThread.Post(() => - { - RefreshIcon(); - }, + Dispatcher.UIThread.Post(RefreshIcon, DispatcherPriority.Default); break; diff --git a/v2rayN/v2rayN/App.xaml.cs b/v2rayN/v2rayN/App.xaml.cs index 3c5f1989..0005fae2 100644 --- a/v2rayN/v2rayN/App.xaml.cs +++ b/v2rayN/v2rayN/App.xaml.cs @@ -22,7 +22,7 @@ public partial class App : Application { var exePathKey = Utils.GetMd5(Utils.GetExePath()); - var rebootas = (e.Args ?? Array.Empty()).Any(t => t == Global.RebootAs); + var rebootas = e.Args.Any(t => t == Global.RebootAs); ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, exePathKey, out var bCreatedNew); if (!rebootas && !bCreatedNew) { diff --git a/v2rayN/v2rayN/ViewModels/ThemeSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/ThemeSettingViewModel.cs index 1d2061cd..a84788e2 100644 --- a/v2rayN/v2rayN/ViewModels/ThemeSettingViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/ThemeSettingViewModel.cs @@ -38,9 +38,7 @@ public class ThemeSettingViewModel : MyReactiveObject if (!_config.UiItem.ColorPrimaryName.IsNullOrEmpty()) { var swatch = new SwatchesProvider().Swatches.FirstOrDefault(t => t.Name == _config.UiItem.ColorPrimaryName); - if (swatch != null - && swatch.ExemplarHue != null - && swatch.ExemplarHue?.Color != null) + if (swatch?.ExemplarHue?.Color is not null) { ChangePrimaryColor(swatch.ExemplarHue.Color); } @@ -67,7 +65,7 @@ public class ThemeSettingViewModel : MyReactiveObject { _config.UiItem.CurrentTheme = CurrentTheme; ModifyTheme(); - ConfigHandler.SaveConfig(_config); + _ = ConfigHandler.SaveConfig(_config); } }); @@ -87,7 +85,7 @@ public class ThemeSettingViewModel : MyReactiveObject { _config.UiItem.ColorPrimaryName = SelectedSwatch?.Name; ChangePrimaryColor(SelectedSwatch.ExemplarHue.Color); - ConfigHandler.SaveConfig(_config); + _ = ConfigHandler.SaveConfig(_config); } }); @@ -100,7 +98,7 @@ public class ThemeSettingViewModel : MyReactiveObject { _config.UiItem.CurrentFontSize = CurrentFontSize; ModifyFontSize(); - ConfigHandler.SaveConfig(_config); + _ = ConfigHandler.SaveConfig(_config); } }); @@ -113,7 +111,7 @@ public class ThemeSettingViewModel : MyReactiveObject { _config.UiItem.CurrentLanguage = CurrentLanguage; Thread.CurrentThread.CurrentUICulture = new(CurrentLanguage); - ConfigHandler.SaveConfig(_config); + _ = ConfigHandler.SaveConfig(_config); NoticeManager.Instance.Enqueue(ResUI.NeedRebootTips); } }); diff --git a/v2rayN/v2rayN/Views/AddServer2Window.xaml.cs b/v2rayN/v2rayN/Views/AddServer2Window.xaml.cs index 0ea4d085..7c45f73f 100644 --- a/v2rayN/v2rayN/Views/AddServer2Window.xaml.cs +++ b/v2rayN/v2rayN/Views/AddServer2Window.xaml.cs @@ -10,7 +10,7 @@ public partial class AddServer2Window Loaded += Window_Loaded; ViewModel = new AddServer2ViewModel(profileItem, UpdateViewHandler); - cmbCoreType.ItemsSource = Utils.GetEnumNames().Where(t => t != ECoreType.v2rayN.ToString()).ToList().AppendEmpty(); + cmbCoreType.ItemsSource = Utils.GetEnumNames().Where(t => t != nameof(ECoreType.v2rayN)).ToList().AppendEmpty(); this.WhenActivated(disposables => { diff --git a/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs b/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs index 337b38e4..ae50cc7e 100644 --- a/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs +++ b/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs @@ -111,7 +111,7 @@ public partial class ClashConnectionsView { try { - List lvColumnItem = new(); + List lvColumnItem = []; foreach (var col in lstConnections.Columns.Cast()) { var name = col.ExName; diff --git a/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs b/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs index f49fe80f..33cfc142 100644 --- a/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs @@ -5,7 +5,7 @@ namespace v2rayN.Views; public partial class GlobalHotkeySettingWindow { - private readonly List _textBoxKeyEventItem = new(); + private readonly List _textBoxKeyEventItem = []; public GlobalHotkeySettingWindow() { diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs index c8c57a85..5739a8aa 100644 --- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -144,13 +144,13 @@ public partial class MainWindow AppEvents.ShutdownRequested .AsObservable() .ObserveOn(RxSchedulers.MainThreadScheduler) - .Subscribe(content => Shutdown(content)) + .Subscribe(Shutdown) .DisposeWith(disposables); AppEvents.ShowHideWindowRequested .AsObservable() .ObserveOn(RxSchedulers.MainThreadScheduler) - .Subscribe(blShow => ShowHideWindow(blShow)) + .Subscribe(ShowHideWindow) .DisposeWith(disposables); }); diff --git a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs index 542a0e22..1ee8524f 100644 --- a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs +++ b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs @@ -400,7 +400,7 @@ public partial class ProfilesView { try { - List lvColumnItem = new(); + List lvColumnItem = []; foreach (var item2 in lstProfiles.Columns.Cast()) { lvColumnItem.Add(new()