At run-time, I don't know what type of variable v1
is.
For this reason, I wrote many if else
statements:
if (v1 is ShellProperty<int?>)
{
v2 = (v1 as ShellProperty<int?>).Value;
}
else if (v1 is ShellProperty<uint?>)
{
v2 = (v1 as ShellProperty<uint?>).Value;
}
else if (v1 is ShellProperty<string>)
{
v2 = (v1 as ShellProperty<string>).Value;
}
else if (v1 is ShellProperty<object>)
{
v2 = (v1 as ShellProperty<object>).Value;
}
The only difference is in ShellProperty<AnyType>
.
So instead of writing this with a lot of if else
statements, I decided to use reflection to get the property type at run-time:
Type t1 = v1.GetType().GetProperty("Value").PropertyType;
dynamic v2 = (v1 as ShellProperty<t1>).Value;
This code gets the PropertyType
of v1
and assigns it to the local variable t1
, but after that, my compiler says that:
t1 is a variable but is used like a type
So it does not allow me to write t1
inside ShellProperty<>
.
Please tell me how to solve this problem and how to get more compact code than what I have. Do I need to create a new class?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…