gpt4 book ai didi

c# - 由多个正则表达式值预测的异议创建

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:20 25 4
gpt4 key购买 nike

所以.. 我对对象创建模式有疑问。

我有多个 canonicalId,例如。

school/1
school/1/class/12/
school/1/class/12/teacher/35

我有代表这些的不同对象,它们是根据 id 创建的。我想以一种干净的方式做的是循环通过正则表达式并确定它是哪个对象。

我无法确定应该如何将正则表达式与特定的工厂方法相匹配。

我想提取由字符串中最后一个单词确定的类型。还有 id,然后将其委托(delegate)给服务以从数据存储中检索对象。除了胶水,一切都已到位。我觉得有比使用大量 if/else 语句更好的方法

class Factory()
{
object create(string value)
{
if(match1.ismatch(value))
{
//getting match groups and then using the values to get an object from a data store
var schoolid= mactch.group[1].value;
return new SchoolSerice().GetSchool(schoolid);
}
if(match2.ismatch(value))
{
var schoolid= mactch.group[1].value;
var classid= mactch.group[2].value;
return new SchoolSerice().GetClass(schoolid,classid);
}
}

最佳答案

您可能需要 Reflection ,这将允许您动态调用方法,GetSchoolGetClass 或其他任何方法。你可以看看这个post ,因为我的回答是基于它的。

我只验证了 Regex 部分,因为我没有反射经验,所以我只是试图为您指明正确的方向。

正则表达式:"([^\\/]+)\\/([^\\/]+)"

([^\\/]+) # Capture group #1, will capture any character until forward slash, which will be object name
\\/ #forward slash,
([^\\/]+) # Capture group #2, will capture any character until forward slash or end of string, which will be id

方法名将由前面有 Get 的最后一个匹配的对象名组成。所有的 id 都将被放入一个 int 数组中,该数组将作为方法调用的参数传递。我假设 schoolidclassidint,如果您需要它们作为字符串,只需删除 Int32.Parse().


示例代码。

 class Factory()
{
object create(string value)
{

Type type = Type.GetType("SchoolSerice");
Object obj = Activator.CreateInstance(type);
MethodInfo methodInfo;

string pattern = "([^\\/]+)\\/([^\\/]+)";
string methodName = "";
List<int> argsList = new List<int>();
int[] argsArray;

foreach (Match m in Regex.Matches(value, pattern))
{
methodName="get"+char.ToUpper(m.Groups[1].Value[0]) + m.Groups[1].Value.Substring(1);
argsList.Add(Int32.Parse(m.Groups[2].Value));
}

argsArray=argsList.ToArray();
methodInfo = type.GetMethod(methodName);

return new methodInfo.Invoke(obj, argsArray);

}
}

关于c# - 由多个正则表达式值预测的异议创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37255366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com