mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-23 04:23:12 +00:00
Replace some linq usage with direct logic
This commit is contained in:
parent
fa5bc0d634
commit
31142ee297
19 changed files with 124 additions and 73 deletions
|
@ -24,7 +24,7 @@ namespace PKHeX.Core
|
|||
if (pk.Format <= 3)
|
||||
return; // no markings (gen3 only has 4; can't mark stats intelligently
|
||||
|
||||
var markings = ivs.Select(MarkingMethod(pk)).ToArray();
|
||||
var markings = ivs.Select(MarkingMethod(pk)).ToArray(); // future: stackalloc
|
||||
pk.Markings = PKX.ReorderSpeedLast(markings);
|
||||
}
|
||||
|
||||
|
|
|
@ -107,16 +107,24 @@ namespace PKHeX.Core
|
|||
|
||||
private static int[]? GetSuggestedHiddenPowerIVs(int hpVal, int[] IVs)
|
||||
{
|
||||
var flawless = IVs.Select((v, i) => v == 31 ? i : -1).Where(v => v != -1).ToArray();
|
||||
var permutations = GetPermutations(flawless, flawless.Length);
|
||||
int flawedCount = 0;
|
||||
int[]? best = null;
|
||||
const int max = 31;
|
||||
var flawless = new int[IVs.Length]; // future: stackalloc
|
||||
int flawlessCount = 0;
|
||||
for (int i = 0; i < IVs.Length; i++)
|
||||
{
|
||||
if (IVs[i] == max)
|
||||
flawless[++flawlessCount] = i;
|
||||
}
|
||||
|
||||
var permutations = GetPermutations(flawless, flawlessCount);
|
||||
int flawedCount = 0; // result tracking
|
||||
int[]? best = null; // result tracking
|
||||
int[] ivs = (int[])IVs.Clone();
|
||||
foreach (var permute in permutations)
|
||||
{
|
||||
foreach (var item in permute)
|
||||
foreach (var index in permute)
|
||||
{
|
||||
ivs[item] ^= 1;
|
||||
ivs[index] ^= 1;
|
||||
if (hpVal != GetType(ivs))
|
||||
continue;
|
||||
|
||||
|
@ -129,7 +137,7 @@ namespace PKHeX.Core
|
|||
break; // any further flaws are always worse
|
||||
}
|
||||
// Restore IVs for another iteration
|
||||
Array.Copy(IVs, 0, ivs, 0, ivs.Length);
|
||||
Buffer.BlockCopy(IVs, 0, ivs, 0, ivs.Length);
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PKHeX.Core
|
||||
|
@ -25,7 +26,7 @@ namespace PKHeX.Core
|
|||
public string Move2 => Get(Strings.movelist, pkm.Move2);
|
||||
public string Move3 => Get(Strings.movelist, pkm.Move3);
|
||||
public string Move4 => Get(Strings.movelist, pkm.Move4);
|
||||
public string HeldItem => Get(Strings.GetItemStrings(pkm.Format), pkm.HeldItem);
|
||||
public string HeldItem => GetSpan(Strings.GetItemStrings(pkm.Format), pkm.HeldItem);
|
||||
public string HP => Stats[0].ToString();
|
||||
public string ATK => Stats[1].ToString();
|
||||
public string DEF => Stats[2].ToString();
|
||||
|
@ -121,5 +122,6 @@ namespace PKHeX.Core
|
|||
/// <param name="val">Index to fetch</param>
|
||||
/// <returns>Null if array is null</returns>
|
||||
private static string Get(IReadOnlyList<string> arr, int val) => (uint)val < arr.Count ? arr[val] : string.Empty;
|
||||
private static string GetSpan(ReadOnlySpan<string> arr, int val) => (uint)val < arr.Length ? arr[val] : string.Empty;
|
||||
}
|
||||
}
|
|
@ -123,19 +123,9 @@ namespace PKHeX.Core
|
|||
return Array.Empty<string>();
|
||||
var ew = ((SAV7b)S1).Blocks.EventWork;
|
||||
|
||||
var fOn = SetFlags.Select(z => new { Type = ew.GetFlagType(z, out var subIndex), Index = subIndex, Raw = z })
|
||||
.Select(z => $"{z.Raw:0000}\t{true }\t{z.Index:0000}\t{z.Type}").ToArray();
|
||||
var fOff = ClearedFlags.Select(z => new { Type = ew.GetFlagType(z, out var subIndex), Index = subIndex, Raw = z })
|
||||
.Select(z => $"{z.Raw:0000}\t{false}\t{z.Index:0000}\t{z.Type}").ToArray();
|
||||
|
||||
var w = WorkChanged.Select((z, i) => new
|
||||
{
|
||||
Type = ew.GetWorkType(z, out var subIndex),
|
||||
Index = subIndex,
|
||||
Raw = z,
|
||||
Text = WorkDiff[i]
|
||||
}).ToArray();
|
||||
var wt = w.Select(z => $"{z.Raw:000}\t{z.Text}\t{z.Index:000}\t{z.Type}").ToArray();
|
||||
var fOn = SetFlags.Select(z => new FlagSummary(z, ew).ToString());
|
||||
var fOff = ClearedFlags.Select(z => new FlagSummary(z, ew).ToString());
|
||||
var wt = WorkChanged.Select((z, i) => new WorkSummary(z, ew, WorkDiff[i]).ToString());
|
||||
|
||||
var list = new List<string> { "Flags: ON", "=========" };
|
||||
list.AddRange(fOn);
|
||||
|
@ -158,5 +148,39 @@ namespace PKHeX.Core
|
|||
|
||||
return list;
|
||||
}
|
||||
|
||||
private readonly struct FlagSummary
|
||||
{
|
||||
private EventVarType Type { get; }
|
||||
private int Index { get; }
|
||||
private int Raw { get; }
|
||||
|
||||
public override string ToString() => $"{Raw:0000}\t{false}\t{Index:0000}\t{Type}";
|
||||
|
||||
public FlagSummary(int rawIndex, EventWork7b ew)
|
||||
{
|
||||
Type = ew.GetFlagType(rawIndex, out var subIndex);
|
||||
Index = subIndex;
|
||||
Raw = rawIndex;
|
||||
}
|
||||
}
|
||||
|
||||
private readonly struct WorkSummary
|
||||
{
|
||||
private EventVarType Type { get; }
|
||||
private int Index { get; }
|
||||
private int Raw { get; }
|
||||
private string Text { get; }
|
||||
|
||||
public override string ToString() => $"{Raw:000}\t{Text}\t{Index:000}\t{Type}";
|
||||
|
||||
public WorkSummary(int rawIndex, EventWork7b ew, string text)
|
||||
{
|
||||
Type = ew.GetFlagType(rawIndex, out var subIndex);
|
||||
Index = subIndex;
|
||||
Raw = rawIndex;
|
||||
Text = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -273,7 +273,7 @@ namespace PKHeX.Core
|
|||
if (HeldItem > 0)
|
||||
{
|
||||
var items = Strings.GetItemStrings(Format);
|
||||
if ((uint)HeldItem < items.Count)
|
||||
if ((uint)HeldItem < items.Length)
|
||||
result += $" @ {items[HeldItem]}";
|
||||
}
|
||||
return result;
|
||||
|
@ -384,7 +384,7 @@ namespace PKHeX.Core
|
|||
|
||||
bool TrySetItem(int format)
|
||||
{
|
||||
var items = (string[])Strings.GetItemStrings(format); // IReadOnlyList<string>->string[] must be possible for the provided strings
|
||||
var items = Strings.GetItemStrings(format);
|
||||
int item = StringUtil.FindIndexIgnoreCase(items, itemName);
|
||||
if (item < 0)
|
||||
return false;
|
||||
|
|
|
@ -384,9 +384,7 @@ namespace PKHeX.Core
|
|||
// metSWSH_30000[17] += " (-)"; // Pokémon HOME -- duplicate with 40000's entry
|
||||
}
|
||||
|
||||
public IReadOnlyList<string> GetItemStrings(int generation, GameVersion game = GameVersion.Any)
|
||||
{
|
||||
return generation switch
|
||||
public string[] GetItemStrings(int generation, GameVersion game = GameVersion.Any) => generation switch
|
||||
{
|
||||
0 => Array.Empty<string>(),
|
||||
1 => g1items,
|
||||
|
@ -395,7 +393,6 @@ namespace PKHeX.Core
|
|||
4 => g4items, // mail names changed 4->5
|
||||
_ => itemlist
|
||||
};
|
||||
}
|
||||
|
||||
private string[] GetItemStrings3(GameVersion game)
|
||||
{
|
||||
|
|
|
@ -32,21 +32,23 @@ namespace PKHeX.Core
|
|||
|
||||
private static List<ComboItem> CreateGen2(GameStrings s)
|
||||
{
|
||||
var locations = Util.GetCBList(s.metGSC_00000, Enumerable.Range(0, 0x5F).ToArray());
|
||||
Util.AddCBWithOffset(locations, s.metGSC_00000, 00000, 0x7E, 0x7F);
|
||||
var locations = Util.GetCBList(s.metGSC_00000.AsSpan(0, 0x5F));
|
||||
Util.AddCBWithOffset(locations, s.metGSC_00000.AsSpan(0x7E, 2), 0x7E);
|
||||
return locations;
|
||||
}
|
||||
|
||||
private static List<ComboItem> CreateGen3(GameStrings s)
|
||||
{
|
||||
var locations = Util.GetCBList(s.metRSEFRLG_00000, Enumerable.Range(0, 213).ToArray());
|
||||
Util.AddCBWithOffset(locations, s.metRSEFRLG_00000, 00000, 253, 254, 255);
|
||||
var locations = Util.GetCBList(s.metRSEFRLG_00000.AsSpan(0, 213));
|
||||
Util.AddCBWithOffset(locations, s.metRSEFRLG_00000.AsSpan(253, 3), 253);
|
||||
return locations;
|
||||
}
|
||||
|
||||
private static List<ComboItem> CreateGen3CXD(GameStrings s)
|
||||
{
|
||||
return Util.GetCBList(s.metCXD_00000, Enumerable.Range(0, s.metCXD_00000.Length).ToArray()).Where(c => c.Text.Length > 0).ToList();
|
||||
var list = Util.GetCBList(s.metCXD_00000);
|
||||
list.RemoveAll(z => z.Text.Length == 0);
|
||||
return list;
|
||||
}
|
||||
|
||||
private static List<ComboItem> CreateGen4(GameStrings s)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System.Linq;
|
||||
using System;
|
||||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.EncounterGBLanguage;
|
||||
|
@ -103,9 +103,9 @@ namespace PKHeX.Core
|
|||
new EncounterStatic2Roam(245, 40, GS), // Suicune
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic2[] Encounter_GS = Encounter_GSC_Common.Concat(Encounter_GS_Exclusive).Concat(Encounter_GSC_Roam).ToArray();
|
||||
private static readonly EncounterStatic2[] Encounter_C = Encounter_GSC_Common.Concat(Encounter_C_Exclusive).Concat(Encounter_GSC_Roam.Slice(0, 2)).ToArray();
|
||||
private static readonly EncounterStatic2[] Encounter_GSC = Encounter_GSC_Common.Concat(Encounter_GS_Exclusive).Concat(Encounter_C_Exclusive).Concat(Encounter_GSC_Roam).ToArray();
|
||||
private static readonly EncounterStatic2[] Encounter_GS = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_GS_Exclusive, Encounter_GSC_Roam);
|
||||
private static readonly EncounterStatic2[] Encounter_C = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_C_Exclusive, Encounter_GSC_Roam.AsSpan(0, 2));
|
||||
private static readonly EncounterStatic2[] Encounter_GSC = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_GS_Exclusive, Encounter_C_Exclusive, Encounter_GSC_Roam);
|
||||
|
||||
internal static readonly EncounterTrade2[] TradeGift_GSC =
|
||||
{
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System.Linq;
|
||||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
|
||||
namespace PKHeX.Core
|
||||
|
@ -396,13 +395,15 @@ namespace PKHeX.Core
|
|||
new EncounterTrade4RanchSpecial(489, 01) { Moves = new[] {447,240,156,057}, TID = 1000, SID = 09248, OTGender = 1, Location = 3000, Ball = 0x10, Gender = 2, CurrentLevel = 50, EggLocation = 3000, }, // Phione
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade4[] TradeGift_DPPt = new EncounterTrade4PID[]
|
||||
private static readonly EncounterTrade4PID[] TradeGift_DPPtIngame =
|
||||
{
|
||||
new(DPPt, 0x0000008E, 063, 01) { Ability = 1, TID = 25643, SID = 00000, OTGender = 1, Gender = 0, IVs = new[] {15,15,15,20,25,25} }, // Machop -> Abra
|
||||
new(DPPt, 0x00000867, 441, 01) { Ability = 2, TID = 44142, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,20,15,25,25,15}, Contest = 20 }, // Buizel -> Chatot
|
||||
new(DPPt, 0x00000088, 093, 35) { Ability = 1, TID = 19248, SID = 00000, OTGender = 1, Gender = 0, IVs = new[] {20,25,15,25,15,15} }, // Medicham (35 from Route 217) -> Haunter
|
||||
new(DPPt, 0x0000045C, 129, 01) { Ability = 1, TID = 53277, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,25,15,20,25,15} }, // Finneon -> Magikarp
|
||||
}.Concat(RanchGifts).ToArray();
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade4[] TradeGift_DPPt = ArrayUtil.ConcatAll(TradeGift_DPPtIngame, RanchGifts);
|
||||
|
||||
internal static readonly EncounterTrade4PID[] TradeGift_HGSS =
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@ using static PKHeX.Core.GameVersion;
|
|||
using static PKHeX.Core.AreaWeather8;
|
||||
|
||||
using static PKHeX.Core.Encounters8Nest;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core
|
||||
{
|
||||
|
@ -790,7 +789,7 @@ namespace PKHeX.Core
|
|||
new(SWSH, 105,15,01,038,06,2) { TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, Shiny = Shiny.Random, IsNicknamed = false, Relearn = new[] {174,000,000,000}, Form = 1 }, // Marowak-1
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade8[] TradeGift_SWSH = TradeGift_Regular.Concat(TradeGift_R1).ToArray();
|
||||
internal static readonly EncounterTrade8[] TradeGift_SWSH = ArrayUtil.ConcatAll(TradeGift_Regular, TradeGift_R1);
|
||||
|
||||
internal static readonly EncounterStatic[] StaticSW = ArrayUtil.ConcatAll<EncounterStatic>(Nest_Common, Nest_SW, Nest_SH, Dist_DLC2, Dist_DLC1, Dist_Base, GetEncounters(Crystal_SWSH, SW), DynAdv_SWSH, GetEncounters(Encounter_SWSH, SW));
|
||||
internal static readonly EncounterStatic[] StaticSH = ArrayUtil.ConcatAll<EncounterStatic>(Nest_Common, Nest_SW, Nest_SH, Dist_DLC2, Dist_DLC1, Dist_Base, GetEncounters(Crystal_SWSH, SH), DynAdv_SWSH, GetEncounters(Encounter_SWSH, SH));
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System.Linq;
|
||||
using static PKHeX.Core.Encounters8Nest;
|
||||
using static PKHeX.Core.Encounters8Nest;
|
||||
|
||||
namespace PKHeX.Core
|
||||
{
|
||||
|
|
|
@ -49,7 +49,7 @@ namespace PKHeX.Core
|
|||
if (pkm.HeldItem > 0)
|
||||
{
|
||||
var items = s.GetItemStrings(pkm.Format);
|
||||
if ((uint)pkm.HeldItem < items.Count)
|
||||
if ((uint)pkm.HeldItem < items.Length)
|
||||
yield return $" @ {items[pkm.HeldItem]}";
|
||||
}
|
||||
|
||||
|
|
|
@ -470,7 +470,7 @@ namespace PKHeX.Core
|
|||
new InventoryPouchGB(InventoryType.Items, LegalItems, 99, Offsets.PouchItem, 20),
|
||||
new InventoryPouchGB(InventoryType.KeyItems, LegalKeyItems, 99, Offsets.PouchKey, 26),
|
||||
new InventoryPouchGB(InventoryType.Balls, LegalBalls, 99, Offsets.PouchBall, 12),
|
||||
new InventoryPouchGB(InventoryType.PCItems, LegalItems.Concat(LegalKeyItems).Concat(LegalBalls).Concat(LegalTMHMs).ToArray(), 99, Offsets.PouchPC, 50)
|
||||
new InventoryPouchGB(InventoryType.PCItems, ArrayUtil.ConcatAll(LegalItems, LegalKeyItems, LegalBalls, LegalTMHMs), 99, Offsets.PouchPC, 50)
|
||||
};
|
||||
return pouch.LoadAll(Data);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core
|
||||
{
|
||||
|
@ -135,7 +134,8 @@ namespace PKHeX.Core
|
|||
public override string GetDaycareRNGSeed(int loc)
|
||||
{
|
||||
int ofs = loc == 0 ? DaycareOffset : Daycare2;
|
||||
var data = Data.Skip(ofs + 0x1E8).Take(DaycareSeedSize / 2).Reverse().ToArray();
|
||||
var data = Data.AsSpan(ofs + 0x1E8, DaycareSeedSize / 2).ToArray();
|
||||
Array.Reverse(data);
|
||||
return BitConverter.ToString(data).Replace("-", string.Empty);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core
|
||||
{
|
||||
|
@ -100,7 +99,8 @@ namespace PKHeX.Core
|
|||
public override string GetDaycareRNGSeed(int loc)
|
||||
{
|
||||
int ofs = DaycareOffset;
|
||||
var data = Data.Skip(ofs + 0x1E8).Take(DaycareSeedSize / 2).Reverse().ToArray();
|
||||
var data = Data.AsSpan(ofs + 0x1E8, DaycareSeedSize / 2).ToArray();
|
||||
Array.Reverse(data);
|
||||
return BitConverter.ToString(data).Replace("-", string.Empty);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core
|
||||
{
|
||||
|
@ -37,7 +36,8 @@ namespace PKHeX.Core
|
|||
{
|
||||
if (value.Length == 0)
|
||||
{
|
||||
Enumerable.Repeat<byte>(0xFF, 8).ToArray().CopyTo(Data, 0x12);
|
||||
for (int i = 0; i < 8; i++)
|
||||
Data[0x12 + i] = 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace PKHeX.Core
|
|||
if (msg != null)
|
||||
{
|
||||
var itemstr = GameInfo.Strings.GetItemStrings(pkm.Format, (GameVersion)pkm.Version);
|
||||
errata.Add($"{msg} {(held >= itemstr.Count ? held.ToString() : itemstr[held])}");
|
||||
errata.Add($"{msg} {(held >= itemstr.Length ? held.ToString() : itemstr[held])}");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -203,5 +203,15 @@ namespace PKHeX.Core
|
|||
arr3.CopyTo(result, arr1.Length + arr2.Length);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static T[] ConcatAll<T>(T[] arr1, T[] arr2, Span<T> arr3)
|
||||
{
|
||||
int len = arr1.Length + arr2.Length + arr3.Length;
|
||||
var result = new T[len];
|
||||
arr1.CopyTo(result, 0);
|
||||
arr2.CopyTo(result, arr1.Length);
|
||||
arr3.CopyTo(result.AsSpan(arr1.Length + arr2.Length));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core
|
||||
{
|
||||
|
@ -43,10 +42,10 @@ namespace PKHeX.Core
|
|||
return arr;
|
||||
}
|
||||
|
||||
public static List<ComboItem> GetCBList(IReadOnlyList<string> inStrings)
|
||||
public static List<ComboItem> GetCBList(ReadOnlySpan<string> inStrings)
|
||||
{
|
||||
var list = new List<ComboItem>(inStrings.Count);
|
||||
for (int i = 0; i < inStrings.Count; i++)
|
||||
var list = new List<ComboItem>(inStrings.Length);
|
||||
for (int i = 0; i < inStrings.Length; i++)
|
||||
list.Add(new ComboItem(inStrings[i], i));
|
||||
list.Sort(Comparer);
|
||||
return list;
|
||||
|
@ -82,12 +81,10 @@ namespace PKHeX.Core
|
|||
return list;
|
||||
}
|
||||
|
||||
public static List<ComboItem> GetCBList(IReadOnlyList<string> inStrings, params int[][] allowed)
|
||||
public static List<ComboItem> GetCBList(IReadOnlyList<string> inStrings, int[] allowed)
|
||||
{
|
||||
var count = allowed.Sum(z => z.Length);
|
||||
var list = new List<ComboItem>(count);
|
||||
foreach (var arr in allowed)
|
||||
AddCB(list, inStrings, arr);
|
||||
var list = new List<ComboItem>(allowed.Length);
|
||||
AddCB(list, inStrings, allowed);
|
||||
return list;
|
||||
}
|
||||
|
||||
|
@ -97,7 +94,7 @@ namespace PKHeX.Core
|
|||
list.Add(item);
|
||||
}
|
||||
|
||||
public static void AddCBWithOffset(List<ComboItem> cbList, IReadOnlyList<string> inStrings, int offset, params int[] allowed)
|
||||
public static void AddCBWithOffset(List<ComboItem> cbList, IReadOnlyList<string> inStrings, int offset, int[] allowed)
|
||||
{
|
||||
int beginCount = cbList.Count;
|
||||
foreach (var index in allowed)
|
||||
|
@ -108,6 +105,18 @@ namespace PKHeX.Core
|
|||
cbList.Sort(beginCount, allowed.Length, Comparer);
|
||||
}
|
||||
|
||||
public static void AddCBWithOffset(List<ComboItem> cbList, Span<string> inStrings, int offset)
|
||||
{
|
||||
int beginCount = cbList.Count;
|
||||
for (int i = 0; i < inStrings.Length; i++)
|
||||
{
|
||||
var x = inStrings[i];
|
||||
var item = new ComboItem(x, i + offset);
|
||||
cbList.Add(item);
|
||||
}
|
||||
cbList.Sort(beginCount, inStrings.Length, Comparer);
|
||||
}
|
||||
|
||||
public static void AddCB(List<ComboItem> cbList, IReadOnlyList<string> inStrings, int[] allowed)
|
||||
{
|
||||
int beginCount = cbList.Count;
|
||||
|
|
Loading…
Reference in a new issue