Mau*_*imo 20 c# dictionary getter-setter
如何为复杂数据类型(如字典)定义getter和setter?
public Dictionary<string, string> Users
{
get
{
return m_Users;
}
set
{
m_Users = value;
}
}
Run Code Online (Sandbox Code Playgroud)
这会返回整个字典吗?你能编写setter来查看是否存在特定的键值对,然后如果不存在,则添加它.否则更新当前的键值对?对于get,您可以返回特定的键值对而不是整个字典吗?
Jam*_*are 27
使用索引器属性(MSDN):
public class YourClass
{
private readonly IDictionary<string, string> _yourDictionary = new Dictionary<string, string>();
public string this[string key]
{
// returns value if exists
get { return _yourDictionary[key]; }
// updates if exists, adds if doesn't exist
set { _yourDictionary[key] = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用像:
var test = new YourClass();
test["Item1"] = "Value1";
Run Code Online (Sandbox Code Playgroud)
Nik*_*sev 18
不可能以仅涉及属性的方式进行.理论上你可以编写一个setter,但对于getter,你需要指定一个你想要检索的键.这是不可能的,因为属性不接受参数.实现你想要的自然方式是使用方法:
private Dictionary<string, string> users = new Dictionary<string, string>();
public void Set(string key, string value)
{
if (users.ContainsKey(key))
{
users[key] = value;
}
else
{
users.Add(key, value);
}
}
public string Get(string key)
{
string result = null;
if (users.ContainsKey(key))
{
result = users[key];
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
或者,正如其他人已经说过的那样,你可以使用索引器,但我总是发现它们有点麻烦.但我想这只是个人偏好的问题.
而且为了完整起见,这就是setter的样子,尽管拥有这样一个属性非常不寻常和反直觉:
public KeyValuePair<string, string> Users
{
set
{
Set(value.Key, value.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
在内部,它使用Set我之前的代码片段中的方法.