小编Aab*_*ela的帖子

如果不是空,则添加到集合

我有一个非常大的对象,有许多可空类型的变量.我还有一个字典,我想填写这个对象的非空变量.

代码看起来像这样

if (myObject.whatever != null)
{
myDictionary.Add("...",myObject.whatever);
}
if (myObject.somethingElse != null)
{
myDictionary.Add("...",myObject.somethingElse);

...
Run Code Online (Sandbox Code Playgroud)

编辑(对不起搞砸了代码)

当我们无数次重复这个时,我们会得到一堆很长的代码.有没有更短的方式我可以写这个烂摊子?我知道条件运算符(又名?)但这只是为了分配.是否有类似的东西可以添加到集合中?

c# nullable

24
推荐指数
2
解决办法
2万
查看次数

在HtmlAgilityPack中运行脚本

我正在尝试抓一个如下工作的特定网页.

首先加载页面,然后它运行某种javascript来获取填充页面所需的数据.我对这些数据很感兴趣.

如果我使用HtmlAgilityPack获取页面 - 脚本没有运行,所以我得到它本质上是一个空白页面.

有没有办法强制它运行脚本,所以我可以获取数据?

javascript c# html-agility-pack

14
推荐指数
1
解决办法
2万
查看次数

TimeZoneInfo是否考虑了DST?

在时区之间进行转换时,C#是否会考虑夏令时?

我有一个源日期在伦敦的当前时间,我想将其转换为我的时区(CET).这是我正在使用的代码.

DateTime time = DateTime.ParseExact(timeString, "HH:mm", null);
time = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);

//Convert it to the right timezone. It is currently in GMT

TimeZoneInfo gmt = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
TimeZoneInfo current = TimeZoneInfo.Local;

DateTime utc = TimeZoneInfo.ConvertTimeToUtc(time, gmt);
DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, core.startTime = local;
Run Code Online (Sandbox Code Playgroud)

它目前运作良好.然而,当DST出现丑陋的头脑时,它会继续工作还是会破坏它?由于过去遇到过很多问题,我对TimeZones有点警惕.

c# timezone dst

12
推荐指数
1
解决办法
7119
查看次数

使用WebRequests下载pdf文件

我正在尝试自动下载一些pdf文件,给出一个网址列表.

这是我的代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "GET";

var encoding = new UTF8Encoding();

request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-gb,en;q=0.5");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";

HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

BinaryReader reader = new BinaryReader(resp.GetResponseStream());

FileStream stream = new FileStream("output/" + date.ToString("yyyy-MM-dd") + ".pdf",FileMode.Create);

BinaryWriter writer = new BinaryWriter(stream);

while (reader.PeekChar() != -1)
      {
       writer.Write(reader.Read());
      }
       writer.Flush();
       writer.Close();
Run Code Online (Sandbox Code Playgroud)

所以,我知道第一部分有效.我最初得到它并使用TextReader读取它 - 但这给了我损坏的pdf文件(因为pdfs是二进制文件).

现在,如果我运行它,reader.PeekChar()总是-1并且没有任何反应 - 我得到一个空文件.

在调试它时,我注意到reader.Read()实际上在我调用时给出了不同的数字 - 所以也许Peek被打破了.

所以我尝试了一些很脏的东西

try
{
 while (true)
   {
    writer.Write(reader.Read()); …
Run Code Online (Sandbox Code Playgroud)

c# pdf webrequest binaryreader

10
推荐指数
2
解决办法
3万
查看次数

删除 HtmlAgilityPack 中无用的 TextNodes

我正在使用 HtmlAgilityPack 抓取许多网站。问题是它似乎坚持在大多数地方插入 TextNodes,这些地方要么是空的,要么只包含大量的 \n、空格和 \r。

当我计算 childnodes 时,它们往往会给我带来问题,因为 firebug 不会显示它们,但 HtmlAgilityPack 会。

有没有办法告诉 HtmlAgilityPack 停止这样做,或者至少清除这些文本节点?(不过我想保留有用的)。当我们在这里时,Comment 和 Script 标签也是如此。

c# web-scraping html-agility-pack

5
推荐指数
1
解决办法
1704
查看次数

使用System.Diagnostics.Process启动Jar文件

我有一个jar文件,我想在C#中运行.

这是我到目前为止所拥有的:

clientProcess.StartInfo.FileName = @"java -jar C:\Users\Owner\Desktop\myJarFile.jar";
            clientProcess.StartInfo.Arguments = "[Something]";

            clientProcess.Start();
            clientProcess.WaitForExit();

            int exitCode = clientProcess.ExitCode;
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到"系统找不到指定的文件",这是有道理的,因为它不是一个文件的命令.

我见过在线代码告诉你使用:

System.Diagnostics.Process.Start("java -jar myprog.jar");
Run Code Online (Sandbox Code Playgroud)

但是我需要返回代码,我需要等待它退出.

谢谢.

c# java system.diagnostics

3
推荐指数
1
解决办法
1万
查看次数

不使用浏览器控件从字符串获取HtmlDocument

我使用WebClient获取网页的html代码(作为字符串).

但是我想把它变成一个HtmlDocument对象,所以我可以使用这个类提供的DOM功能.目前我知道如何做的唯一方法是使用浏览器控件,如下所示:

            string pageHtml = client.DownloadString(url);

            browser.ScriptErrorsSuppressed = true;

            browser.DocumentText = pageHtml;

            do
            {
                Application.DoEvents();

            } while (browser.ReadyState != WebBrowserReadyState.Complete);

            return browser.Document;
Run Code Online (Sandbox Code Playgroud)

还有另一种方法吗?我知道还有其他浏览器控件可用,但是有更简单的方法吗?

c# browser dom

2
推荐指数
1
解决办法
1万
查看次数