我写了一个泛型类,并希望从静态方法中创建它的实例。问题是我无法创建对象的通用实例。我知道这听起来很混乱,最好是展示代码。泛型类型的返回实例
public class Parameter<T> : IParameter<T>
{
public string Name { get; set; }
public T Value { get; set; }
public bool IsValid()
{
if (String.IsNullOrEmpty(Name))
return false;
return (typeof(T) == typeof(String)) ||
typeof(T) == typeof(bool) ||
typeof(T) == typeof(int) ||
typeof(T) == typeof(double);
}
public XElement ToXml()
{
if (!IsValid())
throw new InvalidParameterException();
var xElement = new XElement("Parameter", Value,
new XAttribute("Type", typeof (T)),
new XAttribute("Name", Name));
return xElement;
}
public static Parameter<T> FromXml(XElement xElement)
{
var sType = xElement.Attributes()
.Where(attribute => attribute.Name == "Type")
.Single().Name.ToString();
var name = xElement.Attributes()
.Where(attribute => attribute.Name == "Name")
.Single().Name.ToString();
var sValue = xElement.Value;//need to use this
var typeVar = Type.GetType(sType);// and this to create proper instance of Parameter<T>
//I need somehow set T equal to typeVar here and Set
return new Parameter<T>() {Name = name};//this is wrong.
//I need return either Parameter<int> or Paramter<double> or Parameter<string> or Parameter<bool>
//basing on typeVar
}
}
我不确定这是否有可能...但看起来像它是微不足道的对象设计要求。有任何想法吗? 谢谢!
UPD:我正在使用.NET 4.0。它有什么区别? :)
UPD2:现在看问题,我看到这是一个愚蠢的问题。并且返回这样的“通用”对象是不可能的。
这是完全不可能从方法内部设置'T'。想想:你怎么可能称这种方法? – SLaks 2011-04-12 16:30:29
var parameter = Parameter.FromXml(element); ? :) – 2011-04-12 16:38:22
ofcourse你可以潜入动态领域,但我不会潜入那一个快速;) – Polity 2011-04-12 16:41:06