我想正确返回一些变量(数组)
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 个广告,每个广告都有一天。
就像我说的,我想返回每个广告 id[在数组中],以及每天.stats.impressions 和 days.stats.click
我该怎么做?或者如何从方法返回更多变量/数组到其他类,我正在使用网络服务,所以我不能使用数据库或类似的东西。
从问题的否决票中可以看出,您需要设计返回值,然后针对它进行编码。
你的查询几乎做到了(现在):
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;
现在您可以开始设计了。首先,您需要一个仅包含点击次数和印象数的统计类:
public class Stat
{
public long Impressions { get; set; }
public long Clicks { get; set; }
}
这里的优化可能是使用结构体,但我不会详细讨论。
正如您当前所定义的那样,每天只有一个统计属性:
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 中输入废话之前我会停在这里:-)
使用您需要的成员创建一个类或结构
public class Stat
{
public int Id { get; set; }
public long Clicks { get; set; }
// ...
}
将方法的签名从
void GetAdsStats
更改为 IEnumerable<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;
}
将
void
更改为您想要返回的类型,例如 Campaign
,然后返回适当的变量。您在方法中定义的变量仅存在于您的方法中,无法从其他方法或类访问。