C# 使用+;=and-=字典对象的getter/setter中的运算符

C# 使用+;=and-=字典对象的getter/setter中的运算符,c#,getter-setter,dictionary,C#,Getter Setter,Dictionary,因此,我: Dictionary<some_enumerator, int> available_spaces; Dictionary<some_enumerator, int> occupied_spaces; Dictionary<some_enumerator, int> total_spaces; 每次我修改被占用的_空间时,我都想做一些类似的事情(我知道这不起作用,但你明白了: public Dictionary<some_enumerato

因此,我:

Dictionary<some_enumerator, int> available_spaces;
Dictionary<some_enumerator, int> occupied_spaces;
Dictionary<some_enumerator, int> total_spaces;
每次我修改被占用的_空间时,我都想做一些类似的事情(我知道这不起作用,但你明白了:

public Dictionary<some_enumerator> Occupied_Spaces {
     get { return _occupied_spaces; }
     set { _occupied_spaces = value; RecalculateSpaces(); }
}
公共字典占用的\u空间{
获取{return}占用的空间;}
设置{u占用的空间=值;重新计算空间();}
}

目前,调用被占用的_空间[key]++不会调用被占用的_空间中的setter(我通过将调试打印抛出到重新计算空间进行测试,结果没有触发)

但我不知道如何覆盖字典中的+(或任何其他基本运算符)。有简单的方法吗

公共字典占用的\u空间{
获取{return}占用的空间;}
设置{u占用的空间=值;重新计算空间();}
}

目前,调用被占用的_空间[key]++不会调用被占用的_空间中的setter(我通过将调试打印抛出到重新计算空间进行测试,结果没有触发)

对。这是因为您没有设置
已占用的\u空格
。您的
已占用的\u空格
仍然引用完全相同的字典对象,只是其内容已更改

Dictionary
没有任何可供您订阅的
Change
事件,因此您面临的问题无法解决。您可以改为创建一个实现
IDictionary
的自定义类,并使用该接口。当Dictionary的内容发生更改时,自定义类可以触发事件

公共字典占用的\u空间{
获取{return}占用的空间;}
设置{u占用的空间=值;重新计算空间();}
}

目前,调用被占用的_空间[key]++不会调用被占用的_空间中的setter(我通过将调试打印抛出到重新计算空间进行测试,结果没有触发)

对。这是因为您没有设置
已占用的\u空格
。您的
已占用的\u空格
仍然引用完全相同的字典对象,只是其内容已更改


Dictionary
没有任何可供您订阅的
Change
事件,因此您面临的问题无法解决。您可以改为创建一个实现
IDictionary
的自定义类,并使用该接口。当Dictionary的内容发生更改时,自定义类可以触发事件。

您可以通过使用此功能替换可用的空间来避免同步:

GetAvailableSpace(some_enumerator e)
{
    return Total_Spaces[e] - Occupied_Spaces[e];
}

您可以通过使用以下功能替换可用的空间来避免同步:

GetAvailableSpace(some_enumerator e)
{
    return Total_Spaces[e] - Occupied_Spaces[e];
}

为什么需要重写这些运算符?如果您使用的是
int
这些运算符已经定义,无法重写。
我知道这不起作用
-那它不起作用呢?我没问题。目前,调用占位符[key]++不会调用占位符中的setter(我通过向重新计算空间抛出调试打印进行了测试,但没有触发)。这是因为您没有设置它-您需要为该属性分配一个新字典才能实现此操作。只需创建一个执行所需操作的函数,并随时调用该函数。
IncrementOccupiedSpace(某些枚举器)
。为什么需要重写这些运算符?如果使用的是
int
这些运算符已经定义,无法重写。
我知道这不起作用
-那它不起作用呢?我没问题。目前,调用占位符[key]++不会调用占位符中的setter(我通过向重新计算空间抛出调试打印进行了测试,但没有触发)。这是因为您没有设置它-您需要为该属性分配一个新字典才能实现此操作。只需创建一个执行所需操作的函数,并随时调用该函数。
IncrementOccupiedSpace(某些枚举器)
public Dictionary<some_enumerator> Occupied_Spaces {
    get { return _occupied_spaces; }
    set { _occupied_spaces = value; RecalculateSpaces(); }
}
GetAvailableSpace(some_enumerator e)
{
    return Total_Spaces[e] - Occupied_Spaces[e];
}