C# 如何编写一个方法来接受一个类型作为参数,并在方法体中使用它将另一个变量强制转换为该传递的类型?
我想要的是有一个方法,它接受一个类型作为参数,并在C中的方法中向该类型强制转换一个变量# 作为一个例子,我想将一个UI元素传递给这个helper方法,并提取其DataContext(在运行时动态绑定)描述。我想以一种更通用的方式使用这个方法,这样我也可以传入DataContext的类型C# 如何编写一个方法来接受一个类型作为参数,并在方法体中使用它将另一个变量强制转换为该传递的类型?,c#,C#,我想要的是有一个方法,它接受一个类型作为参数,并在C中的方法中向该类型强制转换一个变量# 作为一个例子,我想将一个UI元素传递给这个helper方法,并提取其DataContext(在运行时动态绑定)描述。我想以一种更通用的方式使用这个方法,这样我也可以传入DataContext的类型 private String GetDescription(FrameworkElement element, Type type) { return (element.DataContext as ty
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的最后一个答案对我来说很好。但我想知道为什么没有任何直接的解决方案,就像我在问题中的示例代码片段一样。