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

C# 如何编写一个方法来接受一个类型作为参数,并在方法体中使用它将另一个变量强制转换为该传递的类型?,c#,C#,我想要的是有一个方法,它接受一个类型作为参数,并在C中的方法中向该类型强制转换一个变量# 作为一个例子,我想将一个UI元素传递给这个helper方法,并提取其DataContext(在运行时动态绑定)描述。我想以一种更通用的方式使用这个方法,这样我也可以传入DataContext的类型 private String GetDescription(FrameworkElement element, Type type) { return (element.DataContext as ty

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

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

private String GetDescription(FrameworkElement element, Type type) {
    return (element.DataContext as type).Description;
    //or 
    //return ((type)element.DataContext).Description; 
} 
这两种方式都会导致编译时错误

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


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

编写一个
接口
并为您的类实现它:

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
           :"";
}
或者,如果您不想实现
接口
使用反射:

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

使用泛型会更好——也许你应该发布代码。我没有实现它。因为我不知道如何使用它。当前的进度几乎与问题中的代码片段相同“DataContext描述”是什么意思?这是数据上下文的名称吗?或者所有绑定的
DataContext
是否都有名为
Description
的属性?DependencyObject类没有DataContext属性。因此,
element.DataContext
甚至在您转换到类型之前就给出了一个编译时错误。@NielsFilter-这是因为我绑定的DataContext有一个名为Description@MikhailMozolin感谢您提供
FrameworkElement
。但其他两种建议的方法都可能导致运行时错误。您建议的
GetDescription
可以接受
DataContext
中的任何数据类型,并且编译器无法检查定义的约束。因此,使用泛型是无用的。在
String GetDescription(System.Windows.FrameworkElement元素)中,其中T:IDescribable
方法
中,T:IDescribable
是一个类型约束。因此
GetDescription
将只接受实现IDescribable的类型,这在编译时被检查。@MikhailMozolin不,这不是真的
DataContext
是FrameworkElement的子成员,其数据类型为
object
编译器如何检查?我用反思解决了这个问题,因为@SamFarajpourGhamari的最后一个答案对我来说很好。但我想知道为什么没有任何直接的解决方案,就像我在问题中的示例代码片段一样。