C# 如何归还词典<;字符串,字符串>;作为一个IEnumerable<;对象>;哪个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 {

我试图使用xunit的
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.KeyValuePair
2[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
是将整个结果强制转换为新类型,而不是结果集合中的项。