从C#中的方法中的Template获取类

本文关键字:获取 Template 方法 | 更新日期: 2023-09-27 18:29:22

我需要在Generic方法中传递GridViewCommandEventArgsGridViewRowEventArgsint,并希望从中获得值。

示例代码:

public struct RemarkStruct
{
    public string remarkId;
    public RemarkStruct(string _remarkId)
    {
        remarkId = _remarkId;
    }
}
public RemarkStruct GetRemarkData<T>(T val)
{
    if (val is GridViewCommandEventArgs )
    {
        GridViewCommandEventArgs gvCommandArgs = (GridViewCommandEventArgs) val;
        int rowIndex = GetRowIndex_CommandEvent((T) val);
        //
        GridViewRow row = ((GridViewRow)(((ImageButton)gvCommandArgs.CommandSource).NamingContainer));
        remarkId = (row.FindControl("imgBtnDelete") as ImageButton).CommandArgument;
        RemarkStruct remStruct = new RemarkStruct(remarkId);
        return remStruct;
    }
}

我想从下面的方法调用。

protected void gvRemark_RowCommand (object sender, GridViewCommandEventArgs e)
{
    GetRemarkData<GridViewCommandEventArgs >(e);
}

我刚刚为GridViewCommandEventArgs编写了代码,类似地,我想为GridViewRowEventArgs和int编写代码。

从C#中的方法中的Template获取类

您可以使用Interface,类似于。。。

using System;
public struct RemarkStruct
{
}
public interface IEventArgs
{
    RemarkStruct GetRemarkData();
}
public class GridViewCommandEventArgs : EventArgs, IEventArgs
{
    public RemarkStruct GetRemarkData()
    {
        throw new NotImplementedException();
    }
}
public class GridViewRowEventArgs : EventArgs, IEventArgs
{
    public RemarkStruct GetRemarkData()
    {
        throw new NotImplementedException();
    }
}

你的方法会是这样的。。。

protected void gvRemark_RowCommand (object sender, IEventArgs e)
{
    e.GetRemarkData();
}

我不知道这是否是最优雅的方法,但你可以重写这个方法,将int作为参数

protected void gvRemark_RowCommand (object sender, int e)
{
    //... 
}

如果创建了泛型,则可以在泛型函数中传递其他类型。。你可以检查T的类型,然后根据它写代码。

示例:

public RemarkStruct GetRemarkData<T>(T val)
{
 if (typeof(T) == typeof(MyClass))
 {
    MyClass mc = (MyClass)(object) t;
 }
 else if (typeof(T) == typeof(List<MyClass>))
 {
    List<MyClass> lmc = (List<MyClass>)(object) t;
 }
}