我正在使用地理编码API,需要将返回点的坐标表示为纬度/经度对.但是,我不确定是否为此使用结构或类.我最初的想法是使用一个结构,但它们似乎在C#中通常不赞成(例如,Jon Skeet 在这个答案中提到"我几乎从不定义自定义结构").性能和内存使用不是应用程序中的关键因素.
到目前为止,我已经基于一个简单的接口提出了这两个实现:
接口
public interface ILatLng
{
double Lat { get; }
double Lng { get; }
}
Run Code Online (Sandbox Code Playgroud)
LatLng类实现
public class CLatLng : ILatLng
{
public double Lat { get; private set; }
public double Lng { get; private set; }
public CLatLng(double lat, double lng)
{
this.Lat = lat;
this.Lng = lng;
}
public override string ToString()
{
return String.Format("{0},{1}", this.Lat, this.Lng);
}
public override bool Equals(Object obj)
{
if (obj == null)
return …
Run Code Online (Sandbox Code Playgroud) 在C#7中使用本地函数时,如果要将主方法中的参数(或其他局部变量)传递给本地函数,则有两个选项:您可以像任何其他函数一样显式声明参数,也可以简单地从包含方法"捕获"参数/变量并直接使用它们.
一个例子可能说明了这一点:
明确声明
public int MultiplyFoo(int id)
{
return LocalBar(id);
int LocalBar(int number)
{
return number * 2;
}
}
Run Code Online (Sandbox Code Playgroud)
捕获
public int MultiplyFoo(int id)
{
return LocalBar();
int LocalBar()
{
return id * 2;
}
}
Run Code Online (Sandbox Code Playgroud)
两种方法的工作方式相同,但它们调用本地函数的方式不同.
所以我的问题是:
我应该注意两者之间有什么区别吗?我在考虑性能,内存分配,垃圾收集,可维护性等方面.
我有一个ASP.NET MVC站点(使用Linq To Sql作为ORM)以及客户想要针对定制数据库的搜索工具的情况,他们可以选择进行"AND"搜索(所有条件匹配)或'OR'搜索(任何标准匹配).查询非常复杂且冗长,我想知道是否有一种简单的方法可以使它同时完成,而无需创建和维护两个不同版本的查询.
例如,当前的"AND"搜索看起来像这样(但这是一个非常简化的版本):
private IQueryable<SampleListDto> GetSampleSearchQuery(SamplesCriteria criteria)
{
var results = from r in Table where
(r.Id == criteria.SampleId) &&
(r.Status.SampleStatusId == criteria.SampleStatusId) &&
(r.Job.JobNumber.StartsWith(criteria.JobNumber)) &&
(r.Description.Contains(criteria.Description))
select r;
}
Run Code Online (Sandbox Code Playgroud)
我可以复制它并用||替换&& 运营商获得'OR'版本,但觉得必须有更好的方法来实现这一目标.有没有人有任何建议如何以一种易于维护的高效灵活的方式实现这一目标?谢谢.
我需要从远程 URL 下载一些内容,然后还要确定内容是否被压缩(Gzip 或 Deflate)。
我的问题是,当您允许HttpClient执行自动解压缩时,它不会在response.Content.Headers.ContentEncoding
属性中返回任何值。如果您不启用自动解压缩,那么它确实会返回正确的值,ContentEncoding
但是您会留下一个尚未解压缩的 Gzipped 文档,这是没有用的。
取以下代码:
var handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
using (var client = new HttpClient(handler))
{
client.DefaultRequestHeaders.Add("accept-encoding", "gzip, deflate");
client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
using (var message = new HttpRequestMessage(HttpMethod.Get, new Uri("https://www.twitter.com")))
{
using (var response = await client.SendAsync(message))
{
if (response.IsSuccessStatusCode)
{
string encoding = String.Join(",", response.Content.Headers.ContentEncoding);
string content = await response.Content.ReadAsStringAsync();
}
}
} …
Run Code Online (Sandbox Code Playgroud) 我一直在开发一个确定网页信息的应用程序。其中的组成部分之一涉及向 URL 发出 HTTP GET 请求、抓取 HTML 并对其进行分析。这对于我向它抛出的每个 URL 都运行良好,除了一个......
罪魁祸首是 .NET HttpClient
,它似乎总是在请求问题域内的任何 URL 时超时。然而,使用浏览器请求的相同 URL 在几毫秒内就会返回内容。标题似乎没有什么异常。
增加超时只会导致爆炸需要更长的时间。我已经尝试了几分钟,结果相同。我尝试过各种方法,例如将用户代理字符串设置为 Chrome 的字符串,但没有成功。
有问题的域是:http://careers.adidas-group.com 请注意,同一站点也在https://careers.adidas-group.com上运行在 HTTPS 上(它具有有效的证书)。使用任一协议都会导致相同的错误。
我可以使用一个简单的 C# 控制台应用程序来显示该问题,如下所示:
static void Main(string[] args)
{
string url = "http://careers.adidas-group.com";
var client = new HttpClient
{
Timeout = TimeSpan.FromSeconds(10)
};
using (var message = new HttpRequestMessage(HttpMethod.Get, url))
{
using (var httpResponse = Task.Run(() => client.SendAsync(message)).Result)
{
Console.WriteLine("{0}: {1}", httpResponse.StatusCode, httpResponse.ReasonPhrase);
}
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的示例中,我将超时设置为 10 秒,只是为了加快解决问题的速度 - 但是,增加超时并没有什么区别。
具有不同 …
场景:我们有一个服务器,其上托管有多个ASP.NET网站.几天前,这些网站中有相当一部分"破产",出现以下错误:
警告44无法解析此参考.无法找到程序集"AjaxControlToolkit,Version = 1.0.10920.32880,Culture = neutral,PublicKeyToken = 28f01b0e84b6d53e,processorArchitecture = MSIL".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.
经过一些调查后,似乎已在服务器上安装了(商业)CMS系统,并且已将第三方AjaxControlTookit添加到全局程序集缓存中.它没有问,它只是添加了它(事实上,它添加了两个版本:1.0.10618.0和3.0.20229.0).这导致解决冲突,因为有问题的网站在其本地/ Bin目录中引用了不同版本的Toolkit.
所以,我想我的问题是:你认为这个CMS在GAC中安装这些程序集是否可以接受(特别是考虑到程序集是开源库而不是它们自己的)?或者是因为他们如何在/ Bin文件夹中引用程序集更明确地"破坏"错误的网站?谢谢.
我正在尝试使用LastFM API解析JSON提要,但是在JSON数组中返回了某些前缀为#,我不知道如何引用的元素.
到目前为止,我的jQuery代码如下所示:
$.getJSON('http://ws.audioscrobbler.com/2.0/?method=geo.getevents&api_key=ca1599876cde298491941da8577de666&format=json&callback=?', function(data) {
$.each(data.events.event, function(i, item) {
html += "<li><a class='fm-event' href='" + item.url + "'><h4>" + item.title + "</h4>";
html += "<p>at " + item.venue.name + ", " + item.venue.location.city + "<br />";
html += "on " + item.startDate + "</p>";
html += "<img src='" + item.venue.image.text + "' />"; // This doesn't work. how do I do this?
html += "</a></li>";
});
$("#last-fm-events").append(html);
});
Run Code Online (Sandbox Code Playgroud)
我基本上循环遍历feed中的每个项目并动态构建一个列表,然后将其附加到DOM.
我无法弄清楚的是如何获取Feed中图像项的URL.不同尺寸有不同的.图像元素的JSON如下所示:
"image": [ …
Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×3
asp.net ×1
asp.net-mvc ×1
assemblies ×1
asynchronous ×1
c#-7.0 ×1
function ×1
gac ×1
geocoding ×1
gzip ×1
http ×1
javascript ×1
jquery ×1
json ×1
linq ×1
linq-to-sql ×1
parsing ×1
struct ×1
timeout ×1