通用返回类型的通用方法

时间:2018-03-04 10:58:32

标签: c#

假设有一个像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>));
}

但它不起作用。 提前谢谢。

0 个答案:

没有答案