假设我有以下课程:
public class MyClass {
public string FirstAttribute {
get {
return Attributes["FirstAttribute"];
}
set {
Attributes["FirstAttribute"] = value;
}
}
public string SecondAttribute {
get {
return Attributes["SecondAttribute"];
}
set {
Attributes["SecondAttribute"] = value;
}
}
public Dictionary<string, string> Attributes;
public MyClass(Dictionary<string,string> att) {
Attributes = att;
}
}
我希望能够获得指向存储在Dictionary中的值的指针,这样我就可以直接获取和设置值(是不安全的)而无需等待Dictionary来搜索元素每次关键。
有没有办法在c#中做到这一点?
答案 0 :(得分:1)
不,不,不,不。
string
由于某种原因是不可变的。多个引用之间可能共享string
:使用不安全的代码直接修改它可能会导致奇怪的行为。
解决这个问题的方法是编写一个旧的值包装类,并保留对该包装器实例的引用。然后,getter和setter将修改包装器的属性。
答案 1 :(得分:1)
不,我不相信。你可以在字典中存储一个可变的包装器:
public class Wrapper<T>
{
public T Value { get; set; }
}
然后创建字典(顺便说一句,它应该是私有的 - 公共字段除了常量之外是一个非常糟糕的主意)作为Dictionary<string, Wrapper<string>>
。然后,您可以保留与Wrapper<string>
和"FirstAttribute"
相关联的"SecondAttribute"
个字段的字段。
坦率地说,我认为这不是一个特别好的主意 - 我只是坚持使用字典查找 - 但这是一个选择。 (假设没有什么会改变哪个包装器与键相关联。)
另一种选择只是使用两个特定属性的字段 - 当您被要求设置新值时,在字典中设置它并设置字段。当您被要求输入当前值时,只需返回字段中的值即可。当然,这是假设你控制了字典(即它不能在课堂外改变)。
答案 2 :(得分:0)
如果字典中的值是可变的,您可以获取对它们的引用并对它们进行修改。但字符串是不可变的。因此字典有自己的字符串引用副本,并且您无法更改它指向的字符串。如果您尝试将其替换为另一个字符串,则需要使用新引用更新字典。所以基本上没有办法改善你在这种情况下所拥有的东西。