是否null有型?如何在内部表示空值?以下代码中发生了什么?
void Foo(string bar) {...}
void Foo(object bar) {...}
Foo((string)null);
Run Code Online (Sandbox Code Playgroud)
编辑:迄今为止的答案都是非特定的,而且太高级了.我知道引用类型对象由堆栈上的指针组成,指针指向堆上的一个位置,该位置包含同步块索引,类型句柄和对象的字段.当我设置一个对象的实例时,null堆栈上的指针指向哪里?而在代码片段,仅仅是使用C#编译器来决定哪些超载致电剧组,并没有真正空的事情进行任何造型?
我正在寻找了解CLR内部人员的深入答案.
我需要从.NET 2.0客户端与XML-RPC服务器进行通信.你能推荐任何图书馆吗?
编辑:尝试过XML-RPC.Net后,我喜欢它生成动态代理的方式,它非常简洁.不幸的是,一如既往,事情并非如此简单.我正在访问XML-RPC服务,该服务使用非常规技术在方法名称中包含对象名称,如下所示:
object1.object2.someMethod(string1)
Run Code Online (Sandbox Code Playgroud)
这意味着我无法使用属性来设置我的方法的名称,因为它们直到运行时才知道.如果你开始尝试接近原始调用,XML-RPC.Net开始变得非常混乱.
所以,任何人都知道一个简单直接的XML-RPC库,它只会让我做(伪代码):
x = new xmlrpc(host, port)
x.makeCall("methodName", "arg1");
Run Code Online (Sandbox Code Playgroud)
我在Codeproject看了一下Michael的某个人的事情,但是没有单元测试,代码看起来非常可怕.
除非有人有更好的想法,否则我将不得不自己开始一个开源项目!
当我为其他人编写API程序集时,有一些日志记录功能可以帮助诊断客户端使用它的问题.
但是,如果我在程序集中引用log4net,这可能会与客户端应用程序使用的log4net版本冲突.
我不想通过编写自己的日志框架来重新发明轮子.
什么是解决我的困境的最佳方法?
编辑:我想我可以要求将我正在使用的特定版本的log4net安装到GAC中以避免与客户端的版本冲突,但这会使API变得很胖,需要安装而不是插件.
我们使用CruiseControl.Net/NAnt/Subversion堆栈进行CI.为每个构建执行新的签出过于耗时,因此目前我们只是对工作副本进行更新.但是,这会使孤立文件在源代码管理中删除后仍可能保留在工作副本中.我们尝试使用NAnt删除任务只是为了在更新之前删除所有代码源文件,但这可能会破坏工作副本.有没有人知道在干净和最新的工作副本上运行构建的快速方法?编辑:我们在SVN 1.3.2上
我需要在运行时生成一个新接口,其中所有成员都与现有接口相同,除了我将在某些方法上放置不同的属性(某些属性参数在运行时才知道).如何实现?
我正在使用一些相当直接的SQL代码来计算一些(x,y)数据点的回归系数(截距和斜率),使用最小二乘法.这给了我一个很好的最佳线条数据.但是,我们希望能够看到最佳拟合线的95%和5%置信区间(下面的曲线).
链接文字http://www.curvefit.com/2a03be60.gif
这些意味着真正的线具有低于上曲线的95%概率和高于低曲线的95%概率.我该如何计算这些曲线?我已经阅读了维基百科等并完成了一些谷歌搜索,但我还没有找到可理解的数学方程式来计算这个.
编辑:这是我现在所拥有的精髓.
--sample data
create table #lr (x real not null, y real not null)
insert into #lr values (0,1)
insert into #lr values (4,9)
insert into #lr values (2,5)
insert into #lr values (3,7)
declare @slope real
declare @intercept real
--calculate slope and intercept
select
@slope = ((count(*) * sum(x*y)) - (sum(x)*sum(y)))/
((count(*) * sum(Power(x,2)))-Power(Sum(x),2)),
@intercept = avg(y) - ((count(*) * sum(x*y)) - (sum(x)*sum(y)))/
((count(*) * sum(Power(x,2)))-Power(Sum(x),2)) * avg(x)
from #lr
Run Code Online (Sandbox Code Playgroud)
先感谢您.
如果一个人调用了一个.Max()扩展方法IEnumerable<T>,并且其中的对象没有实现IComparable,那么就得到了System.ArgumentException: At least one object must implement IComparable.
为什么不Max和类似的方法约束T实现IComparable,以便可以在编译时而不是在运行时捕获此问题?
protobuf-net实现的一个限制是它同步调用底层流.通过不提供异步API,例如BeginSerialize/EndSerialize或TPL等价物,我们被迫绑定一个等待同步流I/O的线程.
有没有计划在protobuf-net中提供异步方法,或者有任何创造性的方法来解决这个问题?
我需要一个快速方法来确定给定的字符串是否在字符串列表中.
字符串列表直到运行时才知道,但此后它不会改变.
我可以简单地List<String>打电话strings然后做:
if (strings.Contains(item))
Run Code Online (Sandbox Code Playgroud)
但是,如果列表中有许多字符串,这将表现不佳.
我也可以使用a HashSet<String>,但是这将需要调用GetHashCode每个传入的字符串以及Equals,如果列表中只有例如3个字符串,这将是一种浪费.我提到这个需要快吗?
我可以在设置时,决定使用一个List或一个HashSet取决于字符串的数量(例如,使用List少于10个字符串,否则使用HashSet),而不是像中的逻辑HybridDictionary.
由于字符串是unicode,标准的Trie结构将不起作用,尽管Radix树/ Patricia trie可能.那里有基准测试的C#实现吗?
有些人提到绕过String的GetHashCode,并使用更快的进行哈希函数.那里有基准吗?
使用LINQ表达式实质上创建一个优化的switch语句是一种看起来非常有趣的新方法.
还有什么工作?设置成本并不重要,只是搜索速度.
如果重要,传入的字符串值很少会出现在列表中.
我想从Processing用户界面调用一些.NET程序集来处理一些数据和库函数.实现这一目标的最佳方法是什么?公开网络服务?一个RESTful API?一些被遗忘的处理/ Silverlight怪物?
欢迎好主意.
我只是偶然发现了MainSoft的Grasshopper,它声称将.Net ILM交叉编译为Java字节码.它似乎使用.Net库的Mono实现.所有示例都引用了Web应用程序,但我的要求是将.Net API(类库)交叉编译为Java API,以便Java客户端可以使用API.有没有人有使用Grasshopper的经验,你能否看到我的计划有任何问题?
我正在使用nant来构建我们的产品并编写了一个自定义任务来通知我们的帮助台系统新的构建可用.
我已经使用nant来构建自定义任务,并将自定义nant任务程序集复制到nant文件夹中,以便自动加载.
我第一次运行构建时工作正常.
第二次运行构建时,复制任务失败,因为nant已加载自定义任务程序集并锁定了该文件.哎呀.
我怎样才能让它发挥作用?