Я знаю, это не отвечает на вопрос почему. В любом случае, тем, кто читает этот вопрос, может понравиться приведенный ниже код.
Если вы действительно заинтересованы в том, чтобы выстрелить себе в ногу при переопределении локальной переменной, которую следует устанавливать только один раз, и вы не хотите делать ее более доступной в глобальном масштабе, вы можете сделать что-то подобное. 1003 *
public class ReadOnly<T>
{
public T Value { get; private set; }
public ReadOnly(T pValue)
{
Value = pValue;
}
public static bool operator ==(ReadOnly<T> pReadOnlyT, T pT)
{
if (object.ReferenceEquals(pReadOnlyT, null))
{
return object.ReferenceEquals(pT, null);
}
return (pReadOnlyT.Value.Equals(pT));
}
public static bool operator !=(ReadOnly<T> pReadOnlyT, T pT)
{
return !(pReadOnlyT == pT);
}
}
Пример использования:
var rInt = new ReadOnly<int>(5);
if (rInt == 5)
{
//Int is 5 indeed
}
var copyValueOfInt = rInt.Value;
//rInt.Value = 6; //Doesn't compile, setter is private
Возможно, не такой код, как rvar rInt = 5
, но он работает.