我有一个非常大的对象,有许多可空类型的变量.我还有一个字典,我想填写这个对象的非空变量.
代码看起来像这样
if (myObject.whatever != null)
{
myDictionary.Add("...",myObject.whatever);
}
if (myObject.somethingElse != null)
{
myDictionary.Add("...",myObject.somethingElse);
...
Run Code Online (Sandbox Code Playgroud)
编辑(对不起搞砸了代码)
当我们无数次重复这个时,我们会得到一堆很长的代码.有没有更短的方式我可以写这个烂摊子?我知道条件运算符(又名?)但这只是为了分配.是否有类似的东西可以添加到集合中?
我正在尝试抓一个如下工作的特定网页.
首先加载页面,然后它运行某种javascript来获取填充页面所需的数据.我对这些数据很感兴趣.
如果我使用HtmlAgilityPack获取页面 - 脚本没有运行,所以我得到它本质上是一个空白页面.
有没有办法强制它运行脚本,所以我可以获取数据?
在时区之间进行转换时,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有点警惕.
我正在尝试自动下载一些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) 我正在使用 HtmlAgilityPack 抓取许多网站。问题是它似乎坚持在大多数地方插入 TextNodes,这些地方要么是空的,要么只包含大量的 \n、空格和 \r。
当我计算 childnodes 时,它们往往会给我带来问题,因为 firebug 不会显示它们,但 HtmlAgilityPack 会。
有没有办法告诉 HtmlAgilityPack 停止这样做,或者至少清除这些文本节点?(不过我想保留有用的)。当我们在这里时,Comment 和 Script 标签也是如此。
我有一个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)
但是我需要返回代码,我需要等待它退出.
谢谢.
我使用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# ×7
binaryreader ×1
browser ×1
dom ×1
dst ×1
java ×1
javascript ×1
nullable ×1
pdf ×1
timezone ×1
web-scraping ×1
webrequest ×1