我怎样才能 return 一个 Dictionary<string, string> 作为一个 IEnumerable<object> XUnit 的 MemberData 需要

How can I return a Dictionary<string, string> as an IEnumerable<object> which XUnit's MemberData requires

我正在尝试使用 xunit 的 MemberDataAttribute 来 return Key/Values 的列表。

例如,像这样:

[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>>();
    }
}

但它不起作用:

System.InvalidCastExceptionUnable to cast object of type 'System.Collections.Generic.KeyValuePair2[System.String,System.String[]]' to type 'System.Collections.Generic.IEnumerable1[System.Object]'.

您正在尝试将每个 key/value 字典对转换为 IEnumerable。

如果 cardNumbersDictionary<string, string[]>,那么您可以这样做:

return cardNumbers.Cast<object>();

字典首先是 IEnumerable<KeyValuePair>,因此您只需将它们键入对象即可。