我的类有一组布尔值。我想允许更改值,但限制添加或删除它们。 (特别是在PropertyGrid控件中)。
到目前为止,我已经用Google搜索了
.AsReadOnly()
方法作为推荐的解决方案,但与引用类型集合(添加/删除受限制的,已成功保存的更改值)相比,它与值类型的值(添加/删除受限制但未保存更改的值)的工作方式不同
我为这种行为做了一个简短的例子: 考虑一个包装布尔值的类:
class boolWrapper
{
public bool boolValue { get; set; }
public boolWrapper (bool boolValue)
{
this.boolValue = boolValue;
}
}
还有一些其他类使用这两种集合:
class testClassWithArray
{
// Collection of booleans
private List<bool> _boolArray;
public ReadOnlyCollection<bool> boolArray
{
get { return _boolArray.AsReadOnly(); }
}
// Collection of wrapped booleans
private List<boolWrapper> _boolWrappedArray;
public ReadOnlyCollection<boolWrapper> boolWrappedArray
{
get { return _boolWrappedArray.AsReadOnly(); }
}
// Filling collections with some values
public testClassWithArray()
{
_boolArray = new List<bool>();
_boolWrappedArray = new List<boolWrapper>();
for (int i = 0; i < 3; i++)
{
_boolArray.Add(false);
_boolWrappedArray.Add(new boolWrapper(false));
}
}
}
让我们分配一个PropertyGrid:
testClassWithArray testArr = new testClassWithArray();
testPropertyGrid.SelectedObject = testArr;
当更改两个集合的值(boolWrappedArray,boolArray)时,包装值的集合会成功应用新值,但不能替换另一个值。
虽然这种行为可以理解,但有没有办法在没有包装类的情况下,限制添加/删除操作并为值类型集合应用新值?
答案 0 :(得分:0)
虽然这种行为可以理解,但有没有办法在没有包装类的情况下,限制添加/删除操作并为值类型集合应用新值?
虽然一般不推荐,但最简单的方法就是将这些集合公开为Array
(不添加/删除,只编辑,不幸的是没有任何控制(验证)),像这样
class testClassWithArray
{
// Collection of booleans
public bool[] boolArray { get; private set; }
// Collection of wrapped booleans
private List<boolWrapper> _boolWrappedArray;
public ReadOnlyCollection<boolWrapper> boolWrappedArray
{
get { return _boolWrappedArray.AsReadOnly(); }
}
// Filling collections with some values
public testClassWithArray()
{
boolArray = new bool[3];
_boolWrappedArray = new List<boolWrapper>();
for (int i = 0; i < 3; i++)
{
_boolWrappedArray.Add(new boolWrapper(false));
}
}
}