-3

我想正确返回一些变量(数组)

kazkas.Ads[n]; (n = how many ads are)
kazkas.Ads[n].id;
kazkas.Ads[n].Days[m].Stats.Clicks;  // every day have his own clicks
kazkas.Ads[n].Days[m].Stats.Impresons; // every day have his own impresions

从此方法中并在其他类中使用这些变量。

 public static void GetAdsStats(string Ticket, DateTime start, DateTime end, int CamId)
    {
        var client = new CampaignStatsServiceClient();
        var id = new CampaignIdFilter();
        id.CampaignId = CamId;
        var statsdata = new GetAdStatsData();
        var kazkas = new Campaign();


        kazkas = client.GetAdStats(Ticket, new GetAdStatsData
        {
            IdFilter = id,
            StartDate = start,
            EndDate = end
        });
        long AllClicks = 0;
        long AllImpresions = 0;
        int reklamos = kazkas.Ads.Length;
        long[] statistikaClikai = new long[reklamos];
        long[] statistikaImpresions = new long[reklamos];
        for (int i = 0; i < reklamos; i++)
        {
            int dienos = kazkas.Ads[i].Days.Length;
            for (int lop = 0; lop < dienos; lop++)
            {

                AllClicks = AllClicks + kazkas.Ads[i].Days[lop].Stats.Clicks;
                AllImpresions = AllImpresions + kazkas.Ads[i].Days[lop].Stats.Impressions;

            }
            statistikaClikai[i] = AllClicks;
            statistikaImpresions[i] = AllImpresions;

        }

    }

我知道 void 类型不能返回任何东西,但这就是我知道我的方法有效的方式(来自调试)。就像您看到的那样,我正在尝试使用 for 循环来做到这一点。在这里,我有 9 个广告,每个广告都有一天。

就像我说的,我想返回每个 Ads id[in array],以及每个 days.stats.impressions 和 days.stats.click

我怎样才能做到这一点 ?或者如何将更多变量/数组从方法返回到其他类,我正在使用 webservise,所以我不能使用数据库或类似的东西。

4

3 回答 3

1

使用您需要的成员创建一个类或结构

public class Stat
{
   public int Id { get; set; }
   public long Clicks { get; set; }
   ...
}

将方法的签名从void GetAdsStatsto更改IEnumberable<Stat> GetAdsStats为返回统计数据集合或使用yield关键字返回统计对象。

此外,如果您不希望您的方法返回任何内容(返回类型void),请不要使用以 . 开头的名称Get

例子:

public static IEnumerable<Stat> GetAdsStats(...)
{
   ...
   var statList = new List<Stat>();
   for (int i = 0; i < reklamos; i++)
   {
        var stat = new Stat();
        statList.Add(stat);
        int dienos = kazkas.Ads[i].Days.Length;
        for (int lop = 0; lop < dienos; lop++)
        {

            AllClicks = AllClicks + kazkas.Ads[i].Days[lop].Stats.Clicks;
            AllImpresions = AllImpresions + kazkas.Ads[i].Days[lop].Stats.Impressions;

        }
        stat.Clicks = AllClicks;
        stat.Impression = AllImpresions;

    }

    return statList;
}
于 2013-06-18T10:07:07.187 回答
1

从问题的否决票可以看出,您需要设计返回值,然后针对它进行编码。

您的查询几乎可以做到(现在):

kazkas.Ads[n]; (n = how many ads are)
kazkas.Ads[n].id;
kazkas.Ads[n].Days[m].Stats.Clicks;  // every day have his own clicks
kazkas.Ads[n].Days[m].Stats.Impressions; // every day have his own impressions

您现有的代码显示这应该扩展为包括:

kazkas.Ads[n].Total.Clicks;
kazkas.Ads[n].Total.Impressions;

所以现在你可以开始设计了。首先,您需要一个仅包含 Clicks 和 Impressions 的 Stat 类:

public class Stat
{
   public long Impressions { get; set; }
   public long Clicks { get; set; }
}

这里的优化可能是使用结构,但我不会深入。

正如您目前定义的那样,每天只有一个 Stats 属性:

public class DayStat
{
   public Stat Stats { get; set; }
}

现在我们终于可以定义顶级 AdStat:

public class AdStat
{
   public int id { get; set; }
   public DayStat Day[];
   public Stat Total { get; set; }
}

等等......这里还有其他问题,例如确保创建数组并且Stat永远不会创建实例null(这就是为什么制作其中一些类结构是一种选择)。但我真的是一个 VB 程序员,所以在我被抓到在 SO IDE 中输入废话之前我会停在这里 :-)

于 2013-06-23T08:11:09.680 回答
0

将您的类型更改void为您想要返回的类型,例如Campaign,并返回适当的变量。您在方法中定义的变量仅存在于您的方法中,不能从其他方法或类访问。

于 2013-06-18T10:07:45.603 回答