我有一个 WPF UserControl 的通用基类。依赖属性之一定义为
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register
( "Value"
, typeof(T)
, typeof(ValidatingTextBox<T,C>)
, new FrameworkPropertyMetadata(default(T), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)
);
当我为默认值编写default(T)
时,我意识到我真正想要的是不同的东西。对于引用类型,default(T)
为 null,这不是我在这种特殊情况下想要的。如果可能的话,我想构建一个自定义 default
运算符,它允许我返回我自己对默认值应该是什么的想法。这可能吗?
例如我想象的
public static T MyDefault<T>(){
switch(typeof(T)){
case (typeof(String)) : return "";
case (typeof(Foo)) : return new Foo();
}
}
显然,由于多种原因,上面的内容不会编译,但意图应该很清楚。有办法做到这一点吗?
在 C++ 中,我会使用特征类来实现这一点,但我认为这在 C# 中是不可能的。在 C++ 中我最终会做类似的事情。
DefaultGenerator<T>.Default
最佳答案
类似这样的吗?
private static Dictionary<Type,Func<object>> factory = new Dictionary<Type,Func<object>>{
{typeof(string), ()=> String.Empty },
{typeof(MyClass), ()=> new MyClass() },
};
public static T MyDefault<T>()
{
Type t = typeof(T);
Func<object> func = null;
if(factory.TryGetValue(t, out func))
return (T)func();
else
return default(T);
}
关于c# - 在没有类型实例的情况下打开 C# 中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22930218/