从C#中的方法中的Template获取类
本文关键字:获取 Template 方法 | 更新日期: 2023-09-27 18:29:22
我需要在Generic方法中传递GridViewCommandEventArgs
、GridViewRowEventArgs
或int
,并希望从中获得值。
示例代码:
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编写代码。
您可以使用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;
}
}