C# 如何归还词典<;字符串,字符串>;作为一个IEnumerable<;对象>;哪个XUnit';成员数据需要
我试图使用xunit的C# 如何归还词典<;字符串,字符串>;作为一个IEnumerable<;对象>;哪个XUnit';成员数据需要,c#,.net,xunit,C#,.net,Xunit,我试图使用xunit的MemberDataAttribute返回键/值列表 例如,像这样: [Theory] [MemberData("ValidCardData")] public void GivenANumber_Constructor_CreatesANewInstance(NotSureWhatType data) { .. } 这就是我试图制作实际数据的方法 public static IEnumerable<object> ValidCardData {
MemberDataAttribute
返回键/值列表
例如,像这样:
[Theory]
[MemberData("ValidCardData")]
public void GivenANumber_Constructor_CreatesANewInstance(NotSureWhatType data)
{
..
}
这就是我试图制作实际数据的方法
public static IEnumerable<object> ValidCardData
{
get
{
var json = File.ReadAllText("Data\\ValidCards.json");
var cardNumbers = JsonConvert.DeserializeObject<Dictionary<string, string[]>>(json);
return cardNumbers
.Select(x => new KeyValuePair<string, string[]>(x.Key, x.Value))
.ToList()
.Cast<IEnumerable<object>>();
}
}
公共静态IEnumerable ValidCardData
{
收到
{
var json=File.ReadAllText(“Data\\ValidCards.json”);
var cardNumbers=JsonConvert.DeserializeObject(json);
返回卡号
.选择(x=>newkeyvaluepair(x.Key,x.Value))
托利斯先生()
.Cast();
}
}
但它不起作用:
System.InvalidCastException无法强制转换类型为的对象
'System.Collections.Generic.KeyValuePair2[System.String,System.String[]'
键入“System.Collections.Generic.IEnumerable
1[System.Object]”
您试图将字典的每个键/值对强制转换为IEnumerable。 如果
cardNumbers
是字典
,则您可以执行以下操作:
return cardNumbers.Cast<object>();
返回cardNumbers.Cast();
字典是一个
IEnumerable
,因此您只需将它们作为对象键入即可。您正试图将字典的每个键/值对强制转换为IEnumerable。
如果cardNumbers
是字典
,则您可以执行以下操作:
return cardNumbers.Cast<object>();
返回cardNumbers.Cast();
字典一开始就是一个
IEnumerable
,所以你只需要把它们作为对象来输入。准确地说,就是输入同样的东西。只需使用Cast
而不是类型的,后者有一个额外的检查,这是无用的,因为序列中的每个项目都是对象
@Blindy True。我通常在Cast
上使用of type
只是因为1)删除空值通常是件好事,2)我有过几次Cast
行为异常。不过,在这种情况下,Cast
应该和您提到的一样好,而且要快一点。当您不一定想要后一种类型时,支持对其进行转换的一个原因是这样Cast可以“表现得很奇怪”。有时这意味着您确实应该使用OfType,但有时它会显示OfType隐藏的错误,使查找更加困难。我一直认为,Cast
将整个结果转换为新类型,而不是结果集合中的项。确切地说,就是键入相同的内容。只需使用Cast
而不是类型的,后者有一个额外的检查,这是无用的,因为序列中的每个项目都是对象
@Blindy True。我通常在Cast
上使用of type
只是因为1)删除空值通常是件好事,2)我有过几次Cast
行为异常。不过,在这种情况下,Cast
应该和您提到的一样好,而且要快一点。当您不一定想要后一种类型时,支持对其进行转换的一个原因是这样Cast可以“表现得很奇怪”。有时这意味着您确实应该使用OfType,但有时它会显示OfType隐藏的错误,使查找更加困难。我一直认为Cast
是将整个结果强制转换为新类型,而不是结果集合中的项。