小编Gre*_*ech的帖子

轻量级代码生成(LCG)是否已经死亡?

在.NET 2.0-3.5框架中,LCG(又名DynamicMethod类)是在运行时发出轻量级方法的一种不错的方法,当时不需要类结构来支持它们.

在.NET 4.0中,表达式树现在支持语句和块,因此似乎提供了足够的功能来构建这种方法可能需要的任何功能,并且可以比直接发送CIL更容易和更安全地构建操作码.(这个陈述来自于今天将一些最复杂的LCG代码转换为使用表达式树构建和编译的实验.)

那么有什么理由可以在任何新代码中使用LCG吗?那表达树不能做什么吗?或者它现在是一个"死"的功能?

code-generation .net-4.0 lcg

6
推荐指数
1
解决办法
2433
查看次数

响应幂等HTTP POST请求

我们的RESTful API的一部分将允许用户注册带有序列号的项目.由于序列号不是全局唯一的,因此不能用作资源的标识符,因此我们将对父资源使用POST来生成标识符,例如

POST /my/items

<item serial-number="ABCDEF" />
Run Code Online (Sandbox Code Playgroud)

在项目尚未注册的情况下,HTTP语义被很好地定义.我们返回一个Location标头,并将注册的项目作为实体主体,例如

HTTP 201 Created
Location: /my/items/1234    

<item id="1234" serial-number="ABCDEF" />
Run Code Online (Sandbox Code Playgroud)

但是,在项目已经注册的情况下,API应该是幂等的并返回先前注册的项目而不创建新项目.我最好的猜测是,它应该返回200 OK状态代码,并使用Content-Location标头指示项目实际来自哪里,例如

HTTP 200 OK
Content-Location: /my/items/1234    

<item id="1234" serial-number="ABCDEF" />
Run Code Online (Sandbox Code Playgroud)

这看起来合情合理吗?我不完全清楚位置或内容位置是否更适合第二种情况.

rest http http-post

6
推荐指数
1
解决办法
1680
查看次数

是否可以在ASP.NET MVC中实现X-HTTP-Method-Override?

我正在使用ASP.NET MVC实现RESTful API的原型,除了奇怪的bug之外,我已经实现了我在开始时设置的所有要求,除了调用者能够使用X-HTTP-Method-Override自定义标头覆盖HTTP方法.

我想要的是以下要求......

GET /someresource/123 HTTP/1.1
X-HTTP-Method-Override: DELETE
Run Code Online (Sandbox Code Playgroud)

...将被调度到我的控制器方法,该方法实现DELETE功能而不是该GET操作的功能(假设有多个方法实现该操作,并且它们标记有不同的[AcceptVerbs]属性).因此,鉴于以下两种方法,我希望将上述请求分发给第二个:

[ActionName("someresource")]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetSomeResource(int id) { /* ... */ }

[ActionName("someresource")]
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult DeleteSomeResource(int id) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

有人知道这是否可行?这样做会有多少工作......?

rest asp.net-mvc http-method http-headers

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

有条件的去引用运算符在C#中是一件好事吗?

在函数式语言中,通常有一个Maybemonad,它允许你在一个对象上链接多个调用并让整个表达式返回None/ null如果链的任何部分评估为空,而不是典型的NullReferenceException你通过链接调用来获取C#对象可以为null.

这可以通过编写Maybe<T>一些扩展方法来实现,以允许使用查询理解在C#中进行类似的行为,这在使用可选元素/属性处理XML时非常有用,例如

var val = from foo in doc.Elements("foo").FirstOrDefault().ToMaybe()
          from bar in foo.Attribute("bar").ToMaybe()
          select bar.Value;
Run Code Online (Sandbox Code Playgroud)

但是这种语法有点笨拙且不直观,因为人们习惯于处理Linq中的序列而不是单个元素,并且它会给你留下一个Maybe<T>而不是T最后一个.有条件的去引用运算符(例如..)是否足以使其成为语言?例如

var val = doc.Elements("foo").FirstOrDefault()..Attribute("bar")..Value;
Run Code Online (Sandbox Code Playgroud)

条件去引用将扩展为:

object val;
var foo = doc.Elements("foo").FirstOrDefault();
if (foo != null)
{
    var bar = foo.Attribute("bar");
    if (bar != null)
    {
        val = bar.Value;
    }
    else
    {
        val = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以看到,这可能会导致可怕的滥用,例如..在任何地方使用以避免使用NullReferenceException,但另一方面,如果使用得当,它可能在很多情况下非常方便.思考?

c# language-features

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

与Type.MakeByRefType相反的是什么

Type.MakeByRefType.NET中的方法返回类型的副引用版本,例如,System.Int32返回表示类型的返回类型System.Int32&.

但是,如果你已经有了System.Int32&,获得一个普通老的机制是什么System.Int32?似乎没有相反的方法来删除by-ref修饰符.

目前我已经放置了一个黑客,重新构建了程序集限定的名称,而没有&在类型名称的末尾,然后加载该类型,但这非常脏......

.net reflection

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

HttpRequest.ServerVariables在带有IIS7的WCF中抛出ArgumentException

我们在IIS7中运行了一个WCF(.NET 3.5 SP1)服务,该服务被标记为允许ASP.NET兼容模式,因此我们可以访问HttpContext.Current:

[AspNetCompatibilityRequirements(
    RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Run Code Online (Sandbox Code Playgroud)

但是,当尝试访问任何服务器变量时,它会抛出ArgumentException:

System.ArgumentException: Value does not fall within the expected range. 
    at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) 
    at System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name) 
    at System.Web.Hosting.IIS7WorkerRequest.GetServerVariable(String name) 
    at System.Web.Hosting.IIS7WorkerRequest.GetRemoteAddress() 
    at System.Web.HttpRequest.get_UserHostAddress() 
Run Code Online (Sandbox Code Playgroud)

例如,以下任何行都会抛出此异常:

ha = HttpContext.Current.Request.UserHostAddress;
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
us = HttpContext.Current.Request.UserAgent;
Run Code Online (Sandbox Code Playgroud)

这似乎是内部框架调用的结果,这意味着调用代码没有错.

据推测,我们的配置中有一些东西导致了这个问题,但我不知道是什么.有任何想法吗?或者任何想法我如何能够检索这三位数据(遗憾的是,它们似乎没有被WCF本身暴露).

wcf

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

计算给定长度的所有可能子序列(C#)

如果我有一个如下序列(让我们说它是一个IEnumerable<T>):

[A, B, C, D, E]
Run Code Online (Sandbox Code Playgroud)

那么计算给定长度的所有可能(连续和非连续)子序列的最简洁方法是什么?对结果集中的结果进行排序并不重要,但不应包含重复项.

例如,如果我想计算长度为3的所有可能的子序列,结果集将为:

[A, B, C]
[A, B, D]
[A, B, E]
[A, C, D]
[A, C, E]
[A, D, E]
[B, C, D]
[B, C, E]
[B, D, E]
[C, D, E]
Run Code Online (Sandbox Code Playgroud)

为了记录,下面接受的答案给了我一个很好的起点,这里的代码我已经更新,使用了一些新的.NET 3.5扩展方法:

public static IEnumerable<IEnumerable<T>> Subsequences<T>(
    this IEnumerable<T> source, 
    int count)
{
    if (count == 0)
    {
        yield return Enumerable.Empty<T>();
    }
    else
    {
        var skip = 1;
        foreach (var first in source)
        {
            foreach (var rest in source.Skip(skip).Subsequences(count …
Run Code Online (Sandbox Code Playgroud)

c# algorithm

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

Array.IsReadOnly不一致,具体取决于接口实现

一个类型数组同时实现System.Collections.IListSystem.Collections.Generic.ICollection<T>接口,都有自己的IsReadOnly特性.但到底是怎么回事?

var array = new int[10];
Console.WriteLine(array.IsReadOnly); // prints "False"

var list = (System.Collections.IList)array;
Console.WriteLine(list.IsReadOnly); // prints "False"

var collection = (System.Collections.Generic.ICollection<int>)array;
Console.WriteLine(collection.IsReadOnly); // prints "True"
Run Code Online (Sandbox Code Playgroud)

IList阵列的视图表现为我预计,返回相同的阵列本身,但是ICollection<T>该阵列的视图返回true.

这种行为有没有合理的解释,还是编译器/ CLR错误?(如果是后者,我会感到非常惊讶,因为你会想象之前会发现这种情况,但这是违反直觉的,我无法想到解释可能是什么......).

我正在使用C#3.0/.NET 3.5 SP1.

.net .net-3.5 c#-3.0

5
推荐指数
2
解决办法
552
查看次数

数据库迁移"失败"有什么意义?

由于所有数据库都应该是,我们的源代码使用源代码控制进行版本控制.使用由Red Gate的比较工具生成的一系列SQL脚本升级数据库,这与在最近涌现的众多数据库迁移框架中的"向上"迁移基本相同.

但是这些框架中"向下"迁移的重点是什么?通常,"向上"迁移的代码非常复杂(通常随着功能的发展而进行复杂的数据迁移),我很难看到为"向下"迁移而必须反向编写它的目的.这当然是我从未感受到的东西.我在这里错过了什么......?

database migration

5
推荐指数
2
解决办法
1910
查看次数

使用 FairPlay DRM 编码媒体的 SDK?

我的公司经营一个视频网站。我们目前通过流媒体提供我们的内容,并使用 WMRM DRM 下载到 Windows PC。我们希望为 Mac 提供可供下载的内容,但需要使用 FairPlay DRM 系统来保护它们。

这是我们可以做的,还是 FairPlay 专有的,只允许由 Apple 编码?是否有基于 Windows 的 SDK/工具包使我们能够扩展编码器软件以创建受 FairPlay 保护的文件?我更喜欢 SDK,这样我们就可以开发进程内解决方案,而不必调用可执行文件。


(PS:我知道 DRM 并不流行,但这不是我们的要求,而是工作室。所以我们可以选择使用 DRM 提供下载或根本不提供下载。请不要回复“DRM”之类的答案不好”或“DRM 不是答案”,因为这不是我的电话,甚至不是我公司的电话。)

sdk encoding drm fairplay

5
推荐指数
2
解决办法
2617
查看次数

rvm 要求“osx_brew 加载要求失败!”

今天我尝试在我的 Mac (OS X 10.8.3) 上安装 Ruby 2.0.0-p0,但由于 gem 安装的一些问题而失败(不幸的是我没有保留错误日志)。

从那时起,我一直遇到 RVM 和 Brew 的问题 - 如果我尝试使用 RVM 执行任何操作,它只会打印错误消息:

Failed loading requirements for osx_brew!
Run Code Online (Sandbox Code Playgroud)

我尝试删除并重新安装 RVM 和 Brew,但没有成功,而且我在互联网上找不到任何对此消息的引用。有人知道为什么会发生这种情况,以及我该如何解决它吗?

homebrew rvm

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

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