在C#中的扩展方法中为调用者变量赋值

时间:2013-10-03 11:37:23

标签: c# extension-methods

我遇到了扩展方法的问题。我为获取QueryString做了一个通用的扩展方法。我正在使用特定类型的变量调用该方法,QueryString将使用哪种类型的数据。我的扩展方法如下。

public static class my
{
    public static void GetQueryString<T>(this T caller, string queryString)
    {
        if (HttpContext.Current.Request.QueryString[queryString] != null)
        {
            T type = (T)Convert.ChangeType(HttpContext.Current.Request.QueryString[queryString], typeof(T));
            caller = type;
        }
    }

    public static void GetQueryString(this Employee caller)
    {
        caller.ID = 23;
    }
}

我想从querystring获取字符串值,因为我声明了一个字符串变量然后调用扩展方法。我想在“t1”变量中获取查询字符串值。

 string t1 = string.Empty;
 t1.GetQueryString("name");

但是值不会出现在调用者变量中。同样的事情是使用与Employee对象相关的扩展方法,但我想在原始类型中获取值。如果有人对此有所了解,请与我分享。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

public static T GetQueryString<T>(this T caller, string queryString)
{
    if (HttpContext.Current.Request.QueryString[queryString] != null)
    {
        T type = (T)Convert.ChangeType(HttpContext.Current.Request.QueryString[queryString], typeof(T));

        return type;
    }
}

string t1 = string.Empty;
t1 = t1.GetQueryString("name"); // return the value and reassign

但我没有测试GetQueryString方法。 我能想到的唯一方法是,但没有扩展方法:

public static T GetQueryString<T>(ref T caller, string queryString)
{
    if (HttpContext.Current.Request.QueryString[queryString] != null)
    {
        T type = (T)Convert.ChangeType(HttpContext.Current.Request.QueryString[queryString], typeof(T));

        return type;
    }
}

GetQueryString(ref t1, "name");