支持传递给C#函数的可选数据的最佳方法是什么?
我在.Net中有Web服务功能,它定义了5个参数:
[WebMethod]
public string UploadFile( string wsURL
, byte[] incomingArray
, string FileName
, string RecordTypeName
, MetaData[] metaDataArray)
这个函数的代码不是太长(但也不是很简单),如果要处理任何MetaData [],我在执行此测试的函数中只有一个位置:
if (metaDataArray.Length > 0)
{
Update update = BuildMetaData(metaDataArray);
treq2.Items = new Operation[] { sru, cin, update, fetch};
}
else
{
treq2.Items = new Operation[] { sru, cin, fetch};
}
我需要上面快速而又脏的版本,它只需要4个参数(即没有“元数据”数组作为最终参数)所以我克隆了整个函数并删除了引用元数据的IF-ELSE块。丑陋,我知道。
[WebMethod]
public string UploadFileBasic( string wsURL
, byte[] incomingArray
, string FileName
, string RecordTypeName)
现在我想做得更好,我正在寻找有关支持这一点的最佳方法的建议。我不想通过创建一个空数组作为第五个参数来加重客户端程序...我希望我的Web服务功能足够智能来处理这个可选数据。谢谢。
答案 0 :(得分:7)
在需要5个参数的方法中更改您的检查(注意,您应该检查该值是否为null)。
if (metaDataArray != null && metaDataArray.Length > 0)
{
Update update = BuildMetaData(metaDataArray);
treq2.Items = new Operation[] { sru, cin, update, fetch };
}
else
{
treq2.Items = new Operation[] { sru, cin, fetch};
}
然后,让你的4参数版本在内部调用5参数版本,metaDataArray参数为null。
[WebMethod]
public string UploadFileBasic( string wsURL,
byte[] incomingArray,
string FileName,
string RecordTypeName)
{
return UploadFile( wsUrl, incomingArray, fileName, RecordTypeName, null );
}
答案 1 :(得分:3)
private static readonly MetaData[] EmptyMetaData = new MetaData[0];
[WebMethod]
public string UploadFile(string wsURL
, byte[] incomingArray
, string fileName
, string recordTypeName)
{
return UploadFile(wsURL, incomingArray, fileName, recordTypeName, EmptyMetaData)
}
答案 2 :(得分:2)
如何将包含MetaData数组的所有参数放入单个类中,并将其用作Web服务的参数:
public class UploadFileAgrument
{
public string wsURL;
public byte[] incomingArray;
public string FileName;
public string RecordTypeName;
public MetaData[] metaDataArray;
}
[WebMethod]
public string UploadFile(UploadFileAgrument fileToUpload)
{
if(fileToUpload.metaDataArray!=null && metaDataArray.Length > 0)
{
}
else
{
}
}
答案 3 :(得分:0)
[WebMethod]
public string UploadFileBasic( string wsURL
, byte[] incomingArray
, string FileName
, string RecordTypeName)
{
return UploadFile(wsURL, incomingArray, FileName, RecordTypeName, new MetaData[0]);
}
然后UploadFile方法处理所有内容,但您可以根据消费者的需要公开两个接口。