Căt*_*doi 7 .net c# variables instance-variables
考虑以下代码:
public string Variable1 { get; set;}
public int Variable2 { get; set;}
public void Function()
{
// Has been Variable1 Initialized?
}
Run Code Online (Sandbox Code Playgroud)
在函数内部,我想知道在函数调用之前是否已将值发送到Variable1和Variable2,
即使已发送DEFAULT值,也没问题(对于字符串为null,对于int为0)
考虑使用这样的简单包装:
public struct AssignableProperty<T>
{
private T _value;
public T Value
{
get { return _value; }
set
{
WasAssigned = true;
_value = value;
}
}
public bool WasAssigned { get; private set; }
public static implicit operator AssignableProperty<T>(T data)
{
return new AssignableProperty<T>() { Value = data };
}
public static bool operator ==(AssignableProperty<T> initial, T data)
{
return initial.Value.Equals(data);
}
public static bool operator !=(AssignableProperty<T> initial, T data)
{
return !initial.Value.Equals(data);
}
public override string ToString()
{
return Value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的课将如下所示:
public class Test
{
public AssignableProperty<string> Variable1 { get; set; }
public AssignableProperty<int> Variable2 { get; set; }
public void Function()
{
if(Variable1.WasAssigned&&Variable2.WasAssigned)
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
你可以更进一步,将抛出异常或合约添加到getter,所以如果有人试图访问未初始化的值,它会抛出异常或显示警告