如何在其中创建包含某些值的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>()
的正确方法是什么?
答案 0 :(得分:12)
IReadOnlyList<string>
,尽管名称,只是意味着“列表你可以阅读”,但它并不意味着“不可变列表”。列表是否不可变取决于最终将实现接口的具体类。
因此,您应该做的事情取决于您的需求。
IReadOnlyList<string> myReadOnlyList = myList;
。这有效,因为List<string>
implements IReadOnlyList<string>
。它不会阻止其他人将myReadOnlyList
投回List<string>
。
IReadOnlyList<string> myReadOnlyList = myList.AsReadOnly();
。这将为原始列表创建只读代理。虽然它确实阻止其他人将myReadOnlyList
投回List<string>
,但myReadOnlyList
的内容可能会因myList
的修改而改变。
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
。