使用GetType()进行转换

是否可以将对象GetType()转换为从GetType()返回的类型? 我想要一个可以接受一个对象(对于匿名类型)的generics方法,但然后返回一个转换为匿名类型的对象。 我一直在考虑使用LCG DynamicMethod在容器类上构建一个方法,但我无法弄清楚它会是什么样子。 使用GetType()方法进行GetType()的想法是能够获取匿名类型并将对象强制转换为其实际类型,而无需实际知道类型。

最重要的目标是将匿名类型的对象粘贴到容器中,然后我可以在方法之间共享和传递。

你的意图非常不清楚; 但是,一个选项是generics,特别是MakeGenericMethod 。 你想用这个做什么? 例如:

 static class Program { static void Main() { object obj = 123.45; typeof(Program).GetMethod("DoSomething") .MakeGenericMethod(obj.GetType()) .Invoke(null, new object[] { obj }); } public static void DoSomething(T value) { T item = value; // well... now what? } } 

所以现在我们有了这个值,通过generics输入为double – 但除了调用其他generics方法之外,我们仍然无法用它做什么……你想在这里做什么?

我想不出为什么你想要转换为GetType(),因为你无法做任何事情对结果有用,无论如何都不知道编译时的类型。

也许你正在寻找的是能够转换。 如果是这种情况,以下内容适合您:

 object input = GetSomeInput(); object result = Convert.ChangeType(input, someOtherObject.GetType()); 

我们在从注册表中读取值时使用它们,这些值都存储为字符串,然后使用reflection将它们填充到属性中。

您可以使用Activator.CreateInstance方法从类型创建实例。

FYIreflection是SLOOWWWW,因此如果您需要连续多次执行此操作,最好在枚举或类似内容中定义类型,然后在不使用reflection的情况下创建实例。

我在我的Windows窗体应用程序中有一个用于更改跟踪的类,因为并非所有项都是数据绑定的 。 大多数项目是TextBox控件,但也有ComboBox和DateTimePicker控件。

为简单起见,我的HasChanged属性测试通用的Windows.Forms.Control以查看它是否是ComboBox ,但您可以测试添加到Windows窗体的任何类型的控件。

以下是该课程 – 如果它对任何人都有帮助。

 internal class DataItem { private static Color originalBackColor, changedBackColor, originalForeColor, changedForeColor; private static Font originalFont, changedFont; static DataItem() { originalBackColor = SystemColors.Control; changedBackColor = SystemColors.HighlightText; originalForeColor = Color.Black; changedForeColor = Color.Red; originalFont = new Font(FontFamily.GenericSansSerif, 12.5f); changedFont = new Font(originalFont, FontStyle.Bold); } public static void ChangeSetup(Control original, Color changedBackgroundColor) { originalBackColor = original.BackColor; originalForeColor = original.ForeColor; originalFont = original.Font; changedBackColor = changedBackgroundColor; changedFont = new Font(originalFont, FontStyle.Bold); } private bool changeTracking; public DataItem(Control control, Object value) { this.Control = control; var current = String.Format("{0}", Control.Text).Trim(); if (Control is ComboBox) { var cbo = (ComboBox)Control; current = cbo.StateGet(); } this.OriginalValue = current; this.Control.TextChanged += Control_TextChanged; changeTracking = true; } public Control Control { get; private set; } private void Control_TextChanged(Object sender, EventArgs e) { if (TrackingChanges) { if (HasChanged) { this.Control.BackColor = originalBackColor; this.Control.Font = originalFont; this.Control.ForeColor = originalForeColor; } else { this.Control.BackColor = changedBackColor; this.Control.Font = changedFont; this.Control.ForeColor = changedForeColor; } } } public bool HasChanged { get { var current = String.Format("{0}", Control.Text).Trim(); if (Control is ComboBox) { var cbo = (ComboBox)Control; current = cbo.StateGet(); } return !current.Equals(OriginalValue); } } public String OriginalValue { get; private set; } public void Reset() { changeTracking = false; this.OriginalValue = String.Empty; this.Control.Text = String.Empty; this.Control.BackColor = originalBackColor; this.Control.Font = originalFont; this.Control.ForeColor = originalForeColor; } public bool TrackingChanges { get { return changeTracking; } } } 

您可以使用返回Class对象的getClass(),然后使用Class对象中的cast方法将对象强制转换为该Class类型的对象,如下所示:

myObj.getClass()。CAST(MyObj中)