あなたの状況についての私の理解は、文字列は任意の形式で来ることができるということです。「Military888dTest」、「Mil 1234 Test」、「MilitxyzSOmething」などの文字列を使用できます。
このようなシナリオでは、単純なEnum.Parseは役に立ちません。列挙型の値ごとに、どの組み合わせを許可するかを決定する必要があります。以下のコードを検討してください...
public enum TestType
{
Unknown,
Mil,
IEEE
}
class TestEnumParseRule
{
public string[] AllowedPatterns { get; set; }
public TestType Result { get; set; }
}
private static TestType GetEnumType(string test, List<TestEnumParseRule> rules)
{
var result = TestType.Unknown;
var any = rules.FirstOrDefault((x => x.AllowedPatterns.Any(y => System.Text.RegularExpressions.Regex.IsMatch(test, y))));
if (any != null)
result = any.Result;
return result;
}
var objects = new List<TestEnumParseRule>
{
new TestEnumParseRule() {AllowedPatterns = new[] {"^Military \\d{3}\\w{1} [Test|Test2]+$"}, Result = TestType.Mil},
new TestEnumParseRule() {AllowedPatterns = new[] {"^IEEE \\d{3}\\w{1} [Test|Test2]+$"}, Result = TestType.IEEE}
};
var testString1 = "Military 888d Test";
var testString2 = "Miltiary 833d Spiral";
var result = GetEnumType(testString1, objects);
Console.WriteLine(result); // Mil
result = GetEnumType(testString2, objects);
Console.WriteLine(result); // Unknown
重要なことは、そのルールオブジェクトに関連する正規表現またはテストを入力することです。これらの値を配列に取り込む方法は、実際にはあなた次第です...