首先对标题感到抱歉,不太确定要放在那里。
背景 需要在服务上调用各种方法,但该服务要求我们在每次操作调用之前登录,然后再次注销。
而不是每次都手动进行3次调用,使用泛型来考虑是有用的。
代码和问题
在C#中 写了一个ServiceCaller类
public class ServiceCaller<T>
{
private T instance;
public ServiceCaller(T param)
{
this.instance = param;
}
public void Call<U>(Func<T, U> aExpression, Action<U> returnClass)
{
Authentication authenticate = new Authentication();
if (authenticate.Login())
{
U result = aExpression(this.instance);
returnClass(result);
}
}
}
然后是一个具有实际实现的类
public class MFMPlanActions
{
public string GetPromotionPlans(PromotionPlan plan)
{
PromotionPlan plan = new Promotion()
Do Stuff
return plan
}
}
后面的网页代码
var serviceWrapper = new ServiceTest.ServiceCaller<ServiceTest.MFMPlanActions>
(new ServiceTest.MFMPlanActions());
serviceWrapper.Call(x => x.GetPromotionPlans(plan), u => Console.WriteLine(u));
在C#中运行良好,但在VB.net中
最后一位不起作用
转换后的代码是
Dim serviceWrapper = New API.ServiceCaller(Of API.MFMPlanActions)(New API.MFMPlanActions())
serviceWrapper.[Call](Function(x) x.GetPromotionPlans(plan), Function(u) Console.WriteLine(u))
在线
serviceWrapper.[Call](Function(x) x.GetPromotionPlans(plan), Function(u) Console.WriteLine(u))
我得到:对象引用未设置为对象的实例
我不熟悉VB.net,知道我哪里出错了。
有人可以帮忙吗?
答案 0 :(得分:0)
我认为它不在这段代码中,但可能在vb项目中错过了引用。并且您没有返回在方法Call
中设置returnClass尝试将else语句中的returnClass设置为任何内容以查看错误是否消失,然后我们可以从那里开始
答案 1 :(得分:0)
您可能希望Dim serviceWrapper As New
代替Dim serviceWrapper = New
。
VB.NET通常比C#更明确,尤其是Option Infer Off
和Option Strict On
。尝试在源文件的顶部设置它们。开始明确地向您的语句添加类型,查看错误何时消失。在应用这些代码后,您可能还会注意到代码其他部分的问题。但是,修复它们可以帮助您避免在运行时出现问题。