启动使用程序集的Asp.Net站点时出现以下错误,该程序集又使用dlr和Iron Python进行脚本编写.
BC30560:'ExtensionAttribute'在名称空间'System.Runtime.CompilerServices'中不明确.
问题似乎是众所周知的,问题跟踪器中有一个解决方法.
然而它说它们......
...希望在下一个版本中不需要这种解决方法.
最新版本(我正在使用的版本)是后来的版本,而不是报告中提到的版本.我也尝试下载问题跟踪器中提供的文件并替换当前版本中的文件,但这也不起作用.
除了下载源代码并手动进行构建之外,还有其他解决方案吗?
在null实例(扩展方法不允许)的情况下调用扩展方法时,您认为是最好的异常类型是什么?由于扩展方法只不过是静态方法,你可以说它应该是ArgumentNullException,但另一方面它们像实例方法一样使用,因此使用NullReferenceException可能更自然.我们来看下面的例子:
public static string ToInvariantString(this IFormattable value, string format)
{
return value.ToString(format, CultureInfo.InvariantCulture);
}
Run Code Online (Sandbox Code Playgroud)
这样,如果value参数为null,则抛出NullReferenceException.
另一个例子是:
public static string ToInvariantString(this IFormattable value, string format)
{
if (value == null) throw new ArgumentNullException("value");
return value.ToString(format, CultureInfo.InvariantCulture);
}
Run Code Online (Sandbox Code Playgroud)
编辑: 在一些答案中,你已经指出扩展方法可以像静态方法一样调用,在这种情况下,空引用异常会出错,这是一个很好的观点,实际上是我关注的一个问题,不知道为什么我忘了首先在问题中提到这一点.
有人还指出抛出NullReferenceException是错误的,是的,确实如此.这就是为什么我不扔它,我只是让它发生(让CLR抛出它)不守护方法.
我认为我赞成ArgumentNullException(这是我到目前为止所使用的)但我仍然认为至少有空间来反对NullReferenceException,因为在大多数将要使用该方法的地方看起来更自然.
我不确定我是否完全错过了这里的东西,但我找不到任何方法来确定参数是否通过引用传递,或者不使用反射.
ArgumentInfo有一个属性"IsOut",但没有"IsRef".我如何在给定的MethodInfo中获取所有参考参数?
我发现C#和VB编译器之间的重载决策有所不同.我不确定这是错误还是设计错误:
Public Class Class1
Public Sub ThisBreaks()
' These work '
Foo(Of String)(Function() String.Empty) 'Expression overload '
Foo(String.Empty) 'T overload '
' This breaks '
Foo(Function() String.Empty)
End Sub
Public Sub Foo(Of T)(ByVal value As T)
End Sub
Public Sub Foo(Of T)(ByVal expression As Expression(Of Func(Of T)))
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
请注意,重载的Foo方法是否在VB中定义并不重要.唯一重要的是呼叫站点在VB中.
VB编译器将报告错误:
重载决策失败,因为没有可访问的'Foo'对这些参数最具体:
'Public Sub Foo(Of String)(表达式为System.Linq.Expressions.Expression(Of System.Func(Of String)))':不是最具体的.
'Public Sub Foo(Of)(价值为)':不是最具体的.
添加用于比较的C#代码:
class Class1
{
public void ThisDoesntBreakInCSharp()
{
Foo<string>(() => string.Empty);
Foo(string.Empty);
Foo(() => string.Empty);
}
public …
Run Code Online (Sandbox Code Playgroud) 在我看来,使用HtmlTextWriter渲染HTML并不是非常直观,但如果您在Web表单中实现Web控件,那么您必须使用它.我认为有可能为此创建一个流畅的界面,它更像是它输出的HTML.我想知道人们对我到目前为止提出的语法的看法.
public void Render(HtmlTextWriter writer)
{
writer
.Tag(HtmlTextWriterTag.Div, e => e[HtmlTextWriterAttribute.Id, "id"][HtmlTextWriterAttribute.Name,"name"][HtmlTextWriterAttribute.Class,"class"])
.Tag(HtmlTextWriterTag.Span)
.Text("Lorem")
.EndTag()
.Tag(HtmlTextWriterTag.Span)
.Text("ipsum")
.EndTag()
.EndTag();
}
Run Code Online (Sandbox Code Playgroud)
"Tag","Text"和"EndTag"是HtmlTextWriter类的扩展方法,它返回它所接受的实例,以便可以链接调用.传递给第一次调用"Tag"时使用的重载中使用的lambda的参数是一个"HtmlAttributeManager",它是一个简单的类,它包装一个HtmlTextWriter来提供一个索引器,它接受一个HtmlTextWriterAttribute和一个字符串值并返回实例所以这些电话可以被链接.我也有这个类的方法用于最常见的属性,例如"Name","Class"和"Id",这样你就可以编写上面的第一个调用,如下所示:
.Tag(HtmlTextWriterTag.Div, e => e.Id("id").Name("name").Class("class"))
Run Code Online (Sandbox Code Playgroud)
一个更长的例子:
public void Render(HtmlTextWriter writer)
{
writer
.Tag(HtmlTextWriterTag.Div, a => a.Class("someClass", "someOtherClass"))
.Tag(HtmlTextWriterTag.H1).Text("Lorem").EndTag()
.Tag(HtmlTextWriterTag.Select, t => t.Id("fooSelect").Name("fooSelect").Class("selectClass"))
.Tag(HtmlTextWriterTag.Option, t => t[HtmlTextWriterAttribute.Value, "1"][HtmlTextWriterAttribute.Title, "Selects the number 1."])
.Text("1")
.EndTag(HtmlTextWriterTag.Option)
.Tag(HtmlTextWriterTag.Option, t => t[HtmlTextWriterAttribute.Value, "2"][HtmlTextWriterAttribute.Title, "Selects the number 2."])
.Text("2")
.EndTag(HtmlTextWriterTag.Option)
.Tag(HtmlTextWriterTag.Option, t => t[HtmlTextWriterAttribute.Value, "3"][HtmlTextWriterAttribute.Title, "Selects the number 3."])
.Text("3")
.EndTag(HtmlTextWriterTag.Option)
.EndTag(HtmlTextWriterTag.Select)
.EndTag(HtmlTextWriterTag.Div);
}
Run Code Online (Sandbox Code Playgroud)
希望你能够"破译"这个片段输出的HTML,至少这个想法.
请给我任何关于如何改进语法的想法,可能是更好的方法名称,也许是其他一些方法. …
将我的项目FakeItEasy的VCS 从SVN 更改为Google Code上的Mercurial时,我有点过于渴望(我很有趣).我所做的只是检查SVN的最新版本,然后将结帐作为新Mercurial仓库的第一个修订版.这显然会导致所有历史遗失.
后来当我对Mercurial采取了更好的习惯时,我意识到有一个"转换扩展"这样的东西允许你将SVN仓库转换为Mercurial仓库.现在我要做的是转换旧的SVN仓库,然后将当前存在的Mercurial仓库中的所有变更集导入到此转换后的仓库中,除了第一次提交到Mercurial.
我已经将SVN回购转换为当地的Mercurial回购,但现在是我被困的时候.我以为我能够使用转换扩展来将当前的Mercurial存储库转换为已转换的存储库并且使用拼接映射删除第一次提交,但我似乎无法使其工作.
我也尝试过使用不带拼接映射的转换来从当前的Mercurial repo到转换后的版本中获取所有更改集,并将当前第二个版本的rebase从旧SVN存储库中的最后一次提交但是我无法获得那要么工作.
为了使这个更清楚,我可以说我有这两个存储库:
A: revA1-revA2
B: revB1-revB2-revB3 (Where revB1 is actually a copy of revA2)
Run Code Online (Sandbox Code Playgroud)
现在我想将这两个组合到包含以下内容的新存储库中:
C: revA1-revA2-revB2-revB3
Run Code Online (Sandbox Code Playgroud) 我很惭愧地说出来,但我必须这样做.我没有和ORM合作过.我真的在考虑NHibernate,因为它似乎是.Net最成熟的产品(如果我错了请纠正我).现在,我们有一个庞大的电子商务/预订系统,以SqlServer作为主要集成点,在sprocs中包含了大量的业务逻辑.现在 - 显然 - 这个架构是我们想要摆脱的东西,而且我们已经一段时间地这样做了.所以,我真正的问题是,开始使用NHibernate获取新功能并且不返回并映射所有遗留内容是多么可行?是否支持这种逐步引入和ORM,如果是这样,你会推荐它吗?
好吧,我承认这段代码对你来说很奇怪,那是因为它很奇怪.这只是重现行为的代码,而不是我想要使用的代码.
class Program
{
static void Main(string[] args)
{
try
{
Activator.CreateInstance(typeof(Func<int>), new object[] { new object(), IntPtr.Zero });
}
catch
{
Console.WriteLine("This won't print!");
}
Console.Write("Actually this will not print either!");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
无论我尝试捕获什么异常类型(据我所知抛出的实际异常是ArgumentException),catch块内的代码将不会执行.实际执行只会停在Activator.CreateInstance行.
我昨天在.Net框架中发现了一个错误,发现它是一个已知错误,无法修复.简而言之,当一个int(可能还有其他二进制类型)被分配给该字段时,包含IComparable类型字段的类不能进行二进制序列化和反序列化:
[Serializable]
public class Foo
{
public IComparable Value;
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试序列化(和反序列化)以下两个对象,第一个将成功,第二个将失败:
var s = new Foo { Value = "foo" };
var i = new Foo { Value = 1 };
Run Code Online (Sandbox Code Playgroud)
我在这里更详细地描述了这个:http://ondevelopment.blogspot.com/2009/11/fix-that-bug-will-ya-no.html
您可以在此处找到错误报告(请注意,此报告来自2006年,而不是由我提交):http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeededID = 91177
这不会被修复,因为"修复的风险超过了它的好处".我没有看到任何(可收费的)情况,这将是一个突破性的变化.所以我的实际问题是,有人会想到一个真正的场景,这将是一个突破性的变化吗?
.net ×6
c# ×3
activator ×1
database ×1
exception ×1
html ×1
ironpython ×1
legacy-code ×1
mercurial ×1
nhibernate ×1
orm ×1
reflection ×1
render ×1
svn ×1
vb.net ×1
web-controls ×1