2

支持传递给 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)

现在我想把事情做得更好,我正在寻找支持这一点的最佳方式的建议。我不想通过创建一个空数组作为第 5 个参数来增加客户端程序的负担……我想让我的 Web 服务函数足够智能以处理这些可选数据。谢谢。

4

4 回答 4

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 参数为空。

[WebMethod]
public string UploadFileBasic( string wsURL,
                               byte[] incomingArray,
                               string FileName,
                               string RecordTypeName)
{
    return UploadFile( wsUrl, incomingArray, fileName, RecordTypeName, null );
}
于 2009-07-20T20:43:06.990 回答
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)
}
于 2009-07-20T20:39:30.647 回答
2

如何将包括元数据数组在内的所有参数放入一个类中并将其用作 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
  {
  }  
}
于 2009-07-20T20:49:09.613 回答
0
[WebMethod]
    public string UploadFileBasic( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName)
{
    return UploadFile(wsURL, incomingArray, FileName, RecordTypeName, new MetaData[0]);
}

然后 UploadFile 方法处理所有事情,但是您可以根据消费者的需要公开两个接口。

于 2009-07-20T20:41:00.113 回答