使用通用返回类型创建函数

时间:2012-08-23 11:35:43

标签: c# asp.net generics types

目前我有以下功能

  public int GetVariableValue(TaxReturn taxReturnObj, string identityKey)
    {
        int returnTypeOut = 0;
        if (taxReturnObj.Identity.ContainsKey(identityKey))
        {
            int.TryParse(taxReturnObj.Identity[identityKey], out returnTypeOut);
        }
        return returnTypeOut;
    }

要检索我们使用以下代码的值,

e.g。

int valPayStatus = GetVariableValue(objTaxretrun, TaxReturnIdentity.aadata_identity_paystatus)

现在工作正常,因为所有 Identity 值都是Integer,但最近我们添加了带有String和Boolean类型的New Identites。 所以我想将上述功能设为 Generic ...但我不知道如何去做,我试图在google上搜索但找不到任何东西。

4 个答案:

答案 0 :(得分:5)

我会这样做,也许有更好的方法;

public T GetVariableValue<T>(TaxReturn taxReturnObj, string identityKey)
        {
            if (taxReturnObj.Identity.ContainsKey(identityKey))
            {
                if(typeof(T) == Int32)
                {     
                    int returnTypeOut = 0;
                    int.TryParse(taxReturnObj.Identity[identityKey], out returnTypeOut);
                    return returnTypeOut;
                }
                else if (typeof(T) == System.String)
                {
                //code here
                }
            }
            return default(T);
        }

你可以这样称呼它

int valPayStatus = GetVariableValue<int>(objTaxretrun, TaxReturnIdentity.aadata_identity_paystatus)


string valPayStatusStr = GetVariableValue<string>(objTaxretrun, TaxReturnIdentity.aadata_identity_paystatus)

答案 1 :(得分:3)

    public T GetVariableValue<T>(TaxReturn taxReturnObj, string identityKey) 
    { 
        if (taxReturnObj.Identity.ContainsKey(identityKey)) 
        { 
            return (T) Convert.ChangeType(taxReturnObj.Identity[identityKey], typeof(T));
        }
        else
        {
           return default(T);
        }
    } 

答案 2 :(得分:1)

public T GetVariableValue<T>(TaxReturn taxReturnObj, string identityKey)
{
    if (taxReturnObj.Identity.ContainsKey(identityKey))
    {
        return (T)taxReturnObj.Identity[identityKey];
    }
    return default(T);
}

这样的东西? 如果你传递错误的类型,并不意味着它不会抛出异常。

答案 3 :(得分:1)

您可以尝试这样的事情:

public T GetVariableValue<T>(TaxReturn taxReturnObj, string identityKey)
{
    if (taxReturnObj.Identity.ContainsKey(identityKey))
    {
        return taxReturnObj.Identity[identityKey];   
    }
    return default(T);
}

如果您在字典key中找到Identity,则返回该特定值,而不进行解析,或者您可以返回default