, , . , as, , InvalidCastException, null, . as, .
public class Gen<U> : IGen<U>
{
private U u;
public void Get<T>(ref T value)
where T : class
{
if (value is U)
{
value = u as T;
}
else
throw new Exception();
}
}
, Object:
value = (T)(object)u;
. value is U, , u is T? :
var gen = new Gen<Base>();
gen.Set(new DerivedA());
var b = new DerivedB();
gen.Get(ref b);
value is Base, u is DerivedB. .
, :
public interface INonGen
{
object Value { get; }
}
public interface IGen<U> : INonGen
{
}
public class Gen<U> : IGen<U>
{
private U u;
public object Value
{
get { return u; }
}
}
:
double value = (double)dictionary[key].Value;
An InvalidCastException , . , ?