C#通用T类TypeOf,这可能吗?
|
我有一个通用的类。
Class<T>
,取决于调用代码中的switch语句,它可以是class<int>
class<string>
class<decimal>
返回此方法的方法将其作为对象返回,因为调用代码在设置之后才知道它是什么。
一旦我从函数取回对象,有没有办法做到这一点?
load(object result)
{
Type t = result.GetType().GetGenericArguments()[0];
Class<t> x = (Class<t>) result;
}
还是我必须设置一张支票以检查每种类型。如果是int
,然后是Class<int>
,依此类推...
编辑:
这是我想要做的实际代码:
public class ReportResult<TP>
{
public ReportResult()
{
ReportHeaders = new List<ReportHeader>();
ReportViews = new List<IDataAttributeChild<TP>>();
}
public List<ReportHeader> ReportHeaders {get;set;}
public List<IDataAttributeChild<TP>> ReportViews {get;set;}
}
巴尔
public object GetReportData(ReportProcedureNameEventArg procedureNameEventArg)
{
object result = null;
switch (procedureNameEventArg.SelectedNode.Class)
{
case ReportClass.Count:
var r = new ReportResult<int>
{
ReportViews = GetCountByReport(procedureNameEventArg),
ReportHeaders = GetReportHeaders(procedureNameEventArg.SelectedNode.ReportViewId)
};
result = r;
break;
case ReportClass.List:
break;
case ReportClass.Date:
var r = new ReportResult<datetime>
{
ReportViews = GetDateSummaryReport(procedureNameEventArg),
ReportHeaders = GetReportHeaders(procedureNameEventArg.SelectedNode.ReportViewId)
};
result = r;
break;
default:
throw new ArgumentOutOfRangeException();
}
return result;
}
图形用户界面
public void LoadTreeResult(object result)
{
Type t = result.GetType().GetGenericArguments()[0];
ReportResult<?> fff = (ReportResult<?>)result;
dgResult.Columns.Clear();
foreach (var header in result.ReportHeaders)
{
dgResult.Columns.Add(
new DataGridTextColumn
{
Header = header.Header,
Binding = new Binding(header.Binding)
});
}
// This would also be a switch depending on a property coming
// back to now what class to cast to in order to populate the grid.
List<ReportCountByView> d = new List<ReportCountByView>();
foreach (var reportCountByView in result.ReportViews)
{
d.Add((ReportCountByView)reportCountByView);
}
dgResult.ItemsSource = d;
}
如果可能的话,这是类模型的布局。
布局图
谢谢。
没有找到相关结果
已邀请:
5 个回复
玩翁文醚碱
抬澈帅沮
扑北爱
,
和
除了
外没有其他共同的基本类型,但是它们确实共享一些接口,因此如果以后要对其进行排序,则可以选择类似like15ѭ的东西。或者,如果要使用多个接口,则可以声明通用约束:
但是看起来您要的东西似乎不可能。泛型的整个前提是在设计时设置类型。
浩挎
室邢
\“ List \”是真正使我失望的一个,因为它返回null,否则我会说做类似的事情
(然后以编程方式强制执行类型)。 如果您想通过动力学来尝试它,我想您可以通过使用ReportResult进行鸭子输入来使它基本上那样工作,但是在混合使用List模式时也可能会变得混乱。