创建IReadOnlyList <string>

时间:2018-03-05 16:28:05

标签: c#

如何在其中创建包含某些值的IReadOnlyList<string>

我找到了ReadOnlyCollection的示例,它似乎将现有集合转换为ReadOnlyCollection,但该方法无效。

这是我试过的:

var myList = new List<string>()
{
   "Hello World!",
   "Some more text here"
};

var myReadOnlyList = new IReadOnlyList<string>(myList);

我也尝试在声明期间将我的字符串值添加到IReadOnlyList<string>,但这也不起作用。

在其中创建包含某些值的IReadOnlyList<string>()的正确方法是什么?

2 个答案:

答案 0 :(得分:12)

IReadOnlyList<string>,尽管名称,只是意味着“列表你可以阅读”,但它并不意味着“不可变列表”。列表是否不可变取决于最终将实现接口的具体类。

因此,您应该做的事情取决于您的需求。

  1. IReadOnlyList<string> myReadOnlyList = myList;。这有效,因为List<string> implements IReadOnlyList<string>。它不会阻止其他人将myReadOnlyList投回List<string>

  2. IReadOnlyList<string> myReadOnlyList = myList.AsReadOnly();。这将为原始列表创建只读代理。虽然它确实阻止其他人将myReadOnlyList投回List<string>,但myReadOnlyList的内容可能会因myList的修改而改变。

  3. IReadOnlyList<string> myReadOnlyList = ImmutableList.CreateRange(myList);这会创建一个ImmutableList<string>,其中包含原始列表内容的副本,不允许进行任何修改。 myList中无法看到对myReadOnlyList的更改。

答案 1 :(得分:1)

试试这个:

List<string> listData = new List<string>();
public IReadOnlyList<string> readOnlyData = listData.AsReadOnly();

以下是如何使用它的示例:

string text = readOnlyData[0];

注意:请确保在将listData分配给readOnlyData之前添加到flex-grow: 1