C# .NET反射转换为精确类型
我想知道是否有一种方法可以使用system.reflection强制转换为精确类型,从而避免执行显式转换,例如C# .NET反射转换为精确类型,c#,.net,reflection,casting,C#,.net,Reflection,Casting,我想知道是否有一种方法可以使用system.reflection强制转换为精确类型,从而避免执行显式转换,例如 (System.DateTime) 比如说 假设我有一本字典,比如 Dictionary<propName, Dictionary<object, Type>> 有没有办法做到这一点?如果有,我怎样才能做到? 此外,这段代码的大部分只是一个指导原则,一个想法,所以请不要认为这是可能的。 谢谢大家。一旦您了解了类型: var x = 22; var type
(System.DateTime)
比如说
假设我有一本字典,比如
Dictionary<propName, Dictionary<object, Type>>
有没有办法做到这一点?如果有,我怎样才能做到?
此外,这段代码的大部分只是一个指导原则,一个想法,所以请不要认为这是可能的。
谢谢大家。一旦您了解了类型:
var x = 22;
var type = typeof(Int32);
var propX = Convert.ChangeType(x, type);
或者在您的情况下:
object thing = 32;
var lookup = new Dictionary<string, Dictionary<object, Type>>();
lookup.Add("Test", new Dictionary<object, Type>());
lookup["Test"].Add(thing, typeof(Int32));
var propX = Convert.ChangeType(thing, lookup["Test"][thing]);
object thing=32;
var lookup=newdictionary();
添加(“Test”,newdictionary());
查找[“测试”]。添加(thing,typeof(Int32));
var propX=Convert.ChangeType(thing,lookup[“Test”][thing]);
此方法的注意事项:您需要在目标类上实现一个隐式运算符,使其成为所需的类型
class Program
{
static void Main(string[] args)
{
var a = new A() { property = "someValue" };
string obj = (string)teste;
}
}
class A
{
public string property { get; set; }
public static implicit operator string(A t)
{
if (t == null)
return null;
return t.property;
}
}
- 对象的类型是运行时信息
- 变量的类型是编译时信息
- 编译时间在运行时之前
作为一个解决方案,考虑变量[<代码>动态< /C> >,看看从那里可以做什么。
< P>如果我理解你的问题,你想把一个对象(在<代码>对象< /代码>类型变量)转换成它的实际类型,你已经提取了彻底的反射。如果是这样的话,我相信Convert.ChangeType会对您有所帮助。您可以这样使用它:var propX = Convert.ChangeType(someValue, exactType);
I am pretty casting要求您在编译时知道类型,这就是为什么不能使用
类型
变量进行强制转换(因为它只在运行时已知)。强制转换需要静态已知的类型进行强制转换。您不需要进行动态强制转换,因为运行时知道运行时类型someValue
。如果您不知道静态类型,您可以使用propX
做什么?我认为这不包括随机类型的属性列表,据我所知,这是所要求的。这是一个有限的解决方案。如果OP使用的自定义类型不实现IConvertible,此解决方案将无法工作:同意,我只是按照OP说的做。您可以编辑帖子,向OP发送此规范的信号。;)
class Program
{
static void Main(string[] args)
{
var a = new A() { property = "someValue" };
string obj = (string)teste;
}
}
class A
{
public string property { get; set; }
public static implicit operator string(A t)
{
if (t == null)
return null;
return t.property;
}
}
var propX = Convert.ChangeType(someValue, exactType);