如何编写方法以接受类型作为参数,并在方法体中使用它将另一个变量强制转换为传递的类型

本文关键字:类型 方法 变量 另一个 转换 何编写 参数 | 更新日期: 2023-09-27 18:06:07

我想要的是有一个方法,它接受一个类型作为参数,并将变量强制转换为c#中的该类型

作为一个例子,我想传递一个UI元素到这个助手方法,并提取其DataContext的(在运行时动态绑定)描述。我想以一种更通用的方式使用这个方法,这样我也可以传入DataContext的类型。

private String GetDescription(FrameworkElement element, Type type) {
    return (element.DataContext as type).Description;
    //or 
    //return ((type)element.DataContext).Description; 
} 

这两种方式都会导致编译时错误。

我也试过使用泛型,但是没有成功,因为我可能没有正确理解。

如果有人能以一种简单的方式解释如何做到这一点,那就太好了。

如何编写方法以接受类型作为参数,并在方法体中使用它将另一个变量强制转换为传递的类型

为你的类编写一个interface并实现它:

public interface IDescribable
{
    string Description{get;}
}

在你想要的类上实现这个对象:

public class MyClass:IDescribable
{
   // other members
   public string Description{get; set;}
}

那么你甚至可以写一个扩展方法来提取字符串:

public static string GetDescription(this FrameworkElement element)
{
    var contextData= element.DataContext as IDescribable;
    return contextData!=null
           ? contextData.Description
           :"";
}

或者如果你不想实现interface使用反射:

private string GetDescription(FrameworkElement element)
{
    var decProp= element.DataContext.GetType().GetProperty("Description");
    return decProp!=null
           ?decProp.GetValue(element.DataContext)
           :"";
}