public void ChainConcat_ReadOnlyLists() { string[] leftArray = new[] { "a", "b", "c" }; List <string> leftList = new List <string>(leftArray); IBaseRefList <string> leftBaseRefList = leftArray.AsRefList(); IRefList <string> leftRefList = leftArray.AsRefList(); IRefReadOnlyList <string> leftRefReadOnlyList = leftArray.AsRefReadOnlyList(); ReadOnlyCollection <string> leftReadOnlyList = leftArray.AsReadOnly(); // or leftList.AsReadOnly() string[] rightArray = new[] { "c", "d" }; List <string> rightList = new List <string>(rightArray); IBaseRefList <string> rightBaseRefList = rightArray.AsRefList(); IRefList <string> rightRefList = rightArray.AsRefList(); IRefReadOnlyList <string> rightRefReadOnlyList = rightArray.AsRefReadOnlyList(); ReadOnlyCollection <string> rightReadOnlyList = rightArray.AsReadOnly(); // or rightList.AsReadOnly() // Note: Following is not only testing runtime behavior, but also that the static binding of the appropriate ChainConcat extension method is correct. CommonFixedSizeOrReadOnlyChainListTests(leftArray, rightRefReadOnlyList, leftArray.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftArray, rightReadOnlyList, leftArray.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftList, rightRefReadOnlyList, leftList.ChainConcat(rightRefReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftList, rightReadOnlyList, leftList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftBaseRefList, rightRefReadOnlyList, leftBaseRefList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftBaseRefList, rightReadOnlyList, leftBaseRefList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefList, rightRefReadOnlyList, leftRefList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefList, rightReadOnlyList, leftRefList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightArray, leftRefReadOnlyList.ChainConcat(rightArray), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightList, leftRefReadOnlyList.ChainConcat(rightList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightBaseRefList, leftRefReadOnlyList.ChainConcat(rightBaseRefList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightRefList, leftRefReadOnlyList.ChainConcat(rightRefList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightRefReadOnlyList, leftRefReadOnlyList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightReadOnlyList, leftRefReadOnlyList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightArray, leftReadOnlyList.ChainConcat(rightArray), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightList, leftReadOnlyList.ChainConcat(rightList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightBaseRefList, leftReadOnlyList.ChainConcat(rightBaseRefList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightRefList, leftReadOnlyList.ChainConcat(rightRefList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightRefReadOnlyList, leftReadOnlyList.ChainConcat(rightRefReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightReadOnlyList, leftReadOnlyList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); }
public static IRefReadOnlyList <T> ChainAppend <T>(this IRefReadOnlyList <T> list, params T[] itemsToAppend) => list.ChainConcat(itemsToAppend);