【发布时间】:2019-06-16 01:17:14
【问题描述】:
假设我们有一个包含以下值的输入列表(都是字符串):
var listA = new List<string>();
listA.Add("test");
listA.Add("123");
listA.Add("5.7");
我们还得到了第二个列表:
var listB = new List<object>();
listB.Add(typeof(string));
listB.Add(typeof(int));
listB.Add(typeof(float));
我想通过将 ListA 中的所有值与 ListB 中的类型列表进行匹配来验证其格式是否正确。两个列表的长度相同。
如果是,我想获取一个 List 作为返回值,其中 ListA 的所有值都以 ListB 中指定的格式存储。 如果一个转换失败,我希望能够抛出一个自定义异常。像
throw new MyException($"Failed to convert value {valueX} to {type}");
我只能想象一个非常丑陋的解决方案,其中包含 for 循环、大量强制转换/转换和复制。有没有优雅的解决方案?
【问题讨论】:
-
首先两个列表都有相同的变量,改变它,接下来,你如何将类型映射到值,它正在使用索引,在第 0 个索引处它应该是这种类型,所以第 0 个 - 字符串,第 1 个- 整数,第二个 - 浮点数。还有你创建了什么解决方案,更新它,这样就可以知道你对它的期望是什么
-
但是
"123"和"5.7"仍然是字符串,并且将无法对typeof(int)和typeof(float)进行任何合理的检查。 -
你是否需要支持可空类型(即
listB.Add(typeof(int?));?我问,因为如果你做这个问题更难。 -
@JoelCoehoorn 这将如何影响此处发布的解决方案?将 123 检查到字符串中的预期行为将失败,对吧?
-
@mjwills 不需要支持可空类型。