我有以下代码,我想包装很多类似的对象。它们不一样,我事先也不知道。
一切都很好 - 除了现在我有时需要调用一个方法.Close();并检查它的状态。
我该怎么做?
public static TResult TryGetData<TResult>(Func<TResult> f)
{
if (???.State == CommunicationState.Faulted)
{
???.Close();
}
try
{
return f();
}
catch (Exception ex)
{
return default(TResult);
}
}
奖金信息: 无法更改对象的创建方式。
所有对象都继承自: System.ServiceModel.ClientBase也是通用的方式。
HEEEEEEEEEEEEEEEEEEEELP: - )
答案 0 :(得分:1)
像这样的东西
通话方式:
objectInstance.GetType().GetMethod("Close").Invoke(objectInstance,null);
访问属性:
objectInstance.GetType().GetProperty("State").GetValue(objectInstance);
答案 1 :(得分:1)
我认为你不需要在这里反思,你提到你继承自ClientBase
,根据文件是State
和Close()
所在的地方
因此你只需要限制
public static TResult TryGetData<TResult>(Func<TResult> f) where TResult : ClientBase
这假定???
与TResult