使用在类中定义的有返回值的函数,如何得到执行结果反馈?
2017-08-10 11:27
531 查看
我们做开发时,程序执行完后最好会有个反馈结果,尤其是在庞大的程序中,如果有bug可以及时发现,不然很浪费时间...最近做sde的二次开发,创建数据集时要用到带有返回值的函数,因为在数据集上创建要素类需要用到这个数据集,声明一个全局变量,可以直接用这个返回值.但是在捕获错误方面受到了限制,因为有返回值的函数每一个节点都要有返回值,想直接得到反馈是不行的,想在方法执行后写结果反馈的代码是检测不到的.
只能向师傅求救,给我提供了两种方法解决,感觉很巧妙.
原来的代码:
Form1中的代码:
private void 创建数据集ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
IWorkspace2 workspace = (IWorkspace2)Cls_SDE.OpenSde();
string strDatasetName = txtFileName.Text;
if (strDatasetName == "")
{
MessageBox.Show("请输入要创建的数据集名称!", "错误提示");
return;
}
ISpatialReferenceFactory pSpatialReferenceFac = new SpatialReferenceEnvironmentClass();
ISpatialReference pSpatialReference = pSpatialReferenceFac.CreateProjectedCoordinateSystem
((int)esriSRProjCS4Type.esriSRProjCS_Beijing1954_3_Degree_GK_CM_120E);
gSdeFeatDs = Cls_SDE.CreateFeatureDataset(workspace, strDatasetName, pSpatialReference);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
调用的类中的方法:
public static IFeatureDataset CreateFeatureDataset(IWorkspace2 workspace, string strDatasetName, ISpatialReference spatialReference)
{
try
{
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
if (featureWorkspace == null)
{
return null;
}
if (isDatasetExist(workspace, strDatasetName))
{
return featureWorkspace.CreateFeatureDataset(strDatasetName, spatialReference);
//MessageBox.Show("创建数据集成功!"); //因为已经有返回值了,此处的代码是检测不到的
}
else
{
MessageBox.Show("创建数据集失败!!!");
return null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
}
第一种方法:
在方法中声明一个IFeatureDataset类型的变量,比如:IFeatureDataset ss;把执行函数中的return删除,将执行结果赋值给ss,加上反馈,在if函数外面return ss
修改后是这样:
第二种方法就是在Form1中下功夫,原来的代码不变,在Form1中的函数中加一句if语句判断执行后的结果是否为null,很简单啊,为什么我想不到呢?
只能向师傅求救,给我提供了两种方法解决,感觉很巧妙.
原来的代码:
Form1中的代码:
private void 创建数据集ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
IWorkspace2 workspace = (IWorkspace2)Cls_SDE.OpenSde();
string strDatasetName = txtFileName.Text;
if (strDatasetName == "")
{
MessageBox.Show("请输入要创建的数据集名称!", "错误提示");
return;
}
ISpatialReferenceFactory pSpatialReferenceFac = new SpatialReferenceEnvironmentClass();
ISpatialReference pSpatialReference = pSpatialReferenceFac.CreateProjectedCoordinateSystem
((int)esriSRProjCS4Type.esriSRProjCS_Beijing1954_3_Degree_GK_CM_120E);
gSdeFeatDs = Cls_SDE.CreateFeatureDataset(workspace, strDatasetName, pSpatialReference);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
调用的类中的方法:
public static IFeatureDataset CreateFeatureDataset(IWorkspace2 workspace, string strDatasetName, ISpatialReference spatialReference)
{
try
{
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
if (featureWorkspace == null)
{
return null;
}
if (isDatasetExist(workspace, strDatasetName))
{
return featureWorkspace.CreateFeatureDataset(strDatasetName, spatialReference);
//MessageBox.Show("创建数据集成功!"); //因为已经有返回值了,此处的代码是检测不到的
}
else
{
MessageBox.Show("创建数据集失败!!!");
return null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
}
第一种方法:
在方法中声明一个IFeatureDataset类型的变量,比如:IFeatureDataset ss;把执行函数中的return删除,将执行结果赋值给ss,加上反馈,在if函数外面return ss
修改后是这样:
第二种方法就是在Form1中下功夫,原来的代码不变,在Form1中的函数中加一句if语句判断执行后的结果是否为null,很简单啊,为什么我想不到呢?
相关文章推荐
- 如何使用BAT文件批量运行SQL语句,并保存执行结果
- MFC中自定义消息方法及如何得到消息处理函数的返回值
- 使用ajax得到返回值时执行顺序问题
- 如何使用定时器settimeout、setInterval执行能传递参数的函数
- 如何得到apache用宏来定义的函数
- 如何使用定时器settimeout、setInterval执行能传递参数的函数
- 例题:把一个超市购物的题做成函数。这个题做成函数没有必要,但可以了解输入参数,输出参数,返回值,函数体,还有结构体,ArryList集合,for循环算结果,以及集合里 .count的使用
- (原创)c#学习笔记06--函数01--定义和使用函数01--返回值
- Promise(承诺模式) 定义承诺,取结果,执行回调,返回新承诺 (定义承诺-取结果-返回值作为新承诺结果)
- 如何得到线程执行完之后返回的结果
- php使用odbc执行复杂函数遇到的问题,sql语句直接在sqlserver数据库中运行有结果,使用php总是为空
- 如何得到类成员函数的指针(操作符.×和->*的使用)
- 在form中调用另一个form的方法,函数:fnd_function.execute 如何在form1中调用form2呢?可以使用函数fnd_function.execute。其函数定义如下: fn
- C++中,如何定义和使用指向成员函数的指针
- 如何使用定时器settimeout、setInterval执行能传递参数的函数
- vc使用script控件执行javascript函数,并得到javascript返回值
- 如何使用 TP中的公共函数 (定义在common/common.php中的函数)
- asp.net c#后台页代码 如何使用confirm这样的函数,并获得其bool返回值?
- Java泛型函数如何定义与使用(Java Generic Methods)
- [代码]如何使用用户定义的标量值函数(LINQ to SQL)