所以我可以选择'对象'或'动态'。
动态是否可以使用?
我保持代码简短,所以请忽略任何运行时异常,例如null propertyName和null newValue或找不到字典的索引。
我所知道的:
通话:
public int Index
{
get { return _Index; }
set
{
if (_Index == value) return;
int oldValue = _Index;
_Index = value;
OnChanged(oldValue, value);
}
}
private int _Index;
public string Name
{
get { return _Name; }
set
{
if (_Name == value) return;
string oldValue = _Name;
_Name = value;
OnChanged(oldValue, value);
}
}
private string _Name;
示例1:
private Dictionary<string, dynamic> ModifiedValues = new Dictionary<string, dynamic>();
protected internal virtual void OnChanged(dynamic oldValue, dynamic newValue, string propertyName)
{
if (ModifiedValues[propertyName] == newValue)
ModifiedValues.Remove(propertyName);
else
ModifiedValues[propertyName] = newValue;
//...
}
示例2:
private Dictionary<string, object> ModifiedValues = new Dictionary<string, object>();
protected internal virtual void OnChanged(object oldValue, object newValue, [CallerMemberName] string propertyName = null)
{
if (newValue.GetType().IsValueType)
{
if (newValue.Equals(ModifiedValues[propertyName]))
ModifiedValues.Remove(propertyName);
else
ModifiedValues[propertyName] = newValue;
}
else
{
if (newValue == ModifiedValues[propertyName])
ModifiedValues.Remove(propertyName);
else
ModifiedValues[propertyName] = newValue;
}
//...
}
答案 0 :(得分:0)
C#中的对象类表示System.Object类型,它是C#类层次结构中的根类型。通常我们在编译时指定对象类型时会使用此类,这通常会在我们处理互操作性时发生。
动态类型是在C#4.0中引入的。动态类型间接使用System.Object,但它不需要在运行时对任何操作进行显式类型转换,因为它仅在运行时标识类型。
根据上述定义,动态是可以接受的。