我有这样的结构。
public struct MyStruct
{
public string name;
// other variables and stuff
public MyStruct(string name)
{
this.name = name;
}
}
我在词典中存储了许多,可能是数百甚至数千个,并以name
为键。
var myStructs = new Dictionary<string, MyStruct>();
myStructs.Add("Foo", new MyStruct("Foo"));
我并不总是能够访问字典的键(例如检索值时),因此必须在其中定义结构的名称。
我的问题是,结构可以具有与字典中的键不同的名称。存在这种情况是一个实际问题吗?
myStructs.Add("Bar", new MyStruct("Baz"));
这个问题有点偏离主题,但与上述问题有关,但是如果更改了密钥Foo
下的结构名称,我将如何更新密钥到新名字?
var temp = myStructs["Foo"];
temp.name = "Bar";
myStructs["Foo"] = temp;
答案 0 :(得分:2)
我认为您需要ID
中的唯一DisplayName
和MySctuct
。如果将记录保存在具有唯一性的数据库中将是更好的选择。实际上List<MyStruct>
会在这种情况下为您提供相同的功能,您不必费心改变Dictionary
key
。
根据MSDN,你应该使用一个Class。
Choosing Between Class and Struct
√CONSIDER定义结构而不是类,如果该类型的实例很小并且通常是短暂的或通常嵌入在其他对象中。
X AVOID 定义结构,除非该类型具有以下特征的全部:
它逻辑上表示单个值,类似于基本类型 (int,double等)。
它的实例大小不超过16个字节。
这是不可改变的。
答案 1 :(得分:0)
var temp = myStructs["Foo"];
myStructs.Remove(temp.name);
temp.name = "Bar";
myStructs.Add(temp.name, temp);
或者,您可以将MyStruct.name
设置为属性,并在name
更改时自动更新:
struct MyStruct
{
private string _name;
public string name
{
get { return _name; }
set
{
if (_name == value) return;
GlobalStorageClass.myStructs.Remove(_name);
_name = value;
GlobalStorageClass.myStructs.Add(_name, this);
}
}
public MyStruct(string name)
{
_name = name;
GlobalStorageClass.myStructs.Add(name, this);
}
}
GlobalStorageClass.myStructs
是字典。