假设有一个像ObjectParameter这样的泛型类;此类扩展了IParameter接口。 所以我们有类似的东西:( ObjectParameter是泛型类)。
public class ObjectParameter<T> : IParameter
{
private T ParameterValue;
private string ParameterType;
private string FieldName;
public void SetValue(T _value)
{
ParameterValue = _value;
}
public void SetParameterType(string _type)
{
ParameterType = _type;
}
public void SetFieldName(string _fieldName)
{
FieldName = _fieldName;
}
public T GetValue()
{
return (T)(object)ParameterValue;
}
public string GetParamterType()
{
return ParameterType;
}
public string GetFieldName()
{
return FieldName;
}
}
接口在这里实现:
public interface IParameter
{
string GetParamterType();
}
有一种创建ObjectParameter的方法如下:
private ObjectParameter<T> CreateParameter<T>(T paramValue, string paramType, string fieldName)
{
var param = new ObjectParameter<T>();
param.SetValue(paramValue);
param.SetParameterType(paramType);
param.SetFieldName(fieldName);
return param;
}
现在假设我们将使用上述方法创建的ObjectParameters放在IParamter列表中:
var parametersList =new List<IParameter>();
foreach (var p in s.Parameters)
{
// p.Value is Sprite,string,int,...
var _scriptParamter = CreateParameter(p.Value, p.Type, p.MappingAttribute);
parametersList.Add(_scriptParamter);
}
之后我们将使用如下所示的parametersList:
foreach (var parameter in parameters)
{
var param= parameter as ObjectParameter<Sprite>;
var fieldName = param.GetFieldName();
var type = param.GetParamterType();
var value = param.GetValue();
}
或者可能将对象参数作为字符串:
foreach (var parameter in parameters)
{
var param= parameter as ObjectParameter<string>;
var fieldName = param.GetFieldName();
var type = param.GetParamterType();
var value = param.GetValue();
}
现在的问题是: 如何在函数中组合这两行:
var param= parameter as ObjectParameter<string>;
var param= parameter as ObjectParameter<Sprite>;
我试过这个:
private ObjectParameter<T> Cast<T> (IParameter t)
{
if (t.GetParamterType() == "Sprite") return (ObjectParameter<T>)Convert.ChangeType(t, typeof(ObjectParameter<Sprite>));
if (t.GetParamterType() == "String") return (ObjectParameter<T>)Convert.ChangeType(t, typeof(ObjectParameter<string>));
}
但它不起作用。 提前谢谢。