为C#webmethod制作参数的最佳方法

时间:2009-07-20 20:37:02

标签: c# visual-studio arrays arguments overloading

支持传递给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服务功能足够智能来处理这个可选数据。谢谢。

4 个答案:

答案 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方法处理所有内容,但您可以根据消费者的需要公开两个接口。