确保变量初始化C#

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)

Ale*_*kiy 8

考虑使用这样的简单包装:

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,所以如果有人试图访问未初始化的值,它会抛出异常或显示警告

  • 我喜欢.但我不允许外部"力量"设置'WasAssigned' (2认同)