为什么类型转换费用昂贵?类型转换需要什么?
好吧,我得到它的价值类型,但让我们暂时排除它们.我们来谈谈引用类型之间的转换.如果我写这个:
class Animal { }
class Dog : Animal { }
Run Code Online (Sandbox Code Playgroud)
例1
var dog = new Dog();
object obj = dog;
Run Code Online (Sandbox Code Playgroud)
例2
public Animal GetAnimal()
{
return new Dog();
}
object obj = GetAnimal();
Run Code Online (Sandbox Code Playgroud)
上面的示例包含多少类型转换,为什么它们很昂贵?
据我所知,它只是一个新的4字节指针,必须在线程的本地参数堆栈上分配,并且新创建的引用指针的对象引用指向同一个旧地址.为什么这是一件昂贵的事情呢?是否分配了一个新的对象参考CPU密集型?然后,即使复制相同的对象引用也必须包含该成本,如下例所示:
Animal fish = new Animal();
Animal anotherFish = fish;
Run Code Online (Sandbox Code Playgroud)
那必须同样贵吗?
我正在尝试安装NuGet包Google.Apis.Auth.Mvc.这样做,我收到以下错误消息:
Install-Package:"Microsoft.Bcl"的架构版本与NuGet的2.0.30625.9003版本不兼容.请从http://go.microsoft.com/fwlink/?LinkId=213942将NuGet升级到最新版本
我在Google上查看了这条错误消息,而另外一个人在这两个链接中报告了这样的问题(Visual Studio 2012包管理器控制台错误,http://servercoredump.com/question/21766168/visual-studio-2012-package-经理 - 控制台 - 错误)他只是通过卸载和重新安装NuGet来解决它.
我很害怕这样做,因为我担心NuGet可能无法为我拥有的所有IDE下载扩展.我从Visual Studio Express 2008到2013.
有没有人遇到过这条消息,你知道如何解决这个问题吗?
实际上,有四个相关的问题:
1)为什么可以这样做?
Expression<Func<int, int>> incrementorExpression = (i => i + 1);
Run Code Online (Sandbox Code Playgroud)
但是不能这样做?
LambdaExpression decrementorExpression = (i => i - 1);
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,编译器因此报告:"无法将lambda表达式转换为类型'System.Linq.Expressions.LambdaExpression',因为它不是委托类型"
2)如果是的铸造TDelegate和Expression<TDelegate>申报?我想我记得过去见过它但现在似乎无法找到它.但我无法确定我是否看到了它.
3)当我这样做时:
Expression<Func<int, int>> incrementExpression = (i => ++i);
Run Code Online (Sandbox Code Playgroud)
编译器说:"表达式树可能不包含赋值运算符." 为什么会这样?
4)如果我能做到这一点:
Expression<Func<int, int>> incrementorExpression = (i => i + 1);
Run Code Online (Sandbox Code Playgroud)
那么,为什么我不能做这个?
public Expression<Func<T>> ToExpression<T>(Func<T> func)
{
return func;
}
Run Code Online (Sandbox Code Playgroud) 我想练习JavaScript,我正在寻找一个独立的编译器或解释器,我可以在桌面上作为EXE运行,所以我不必创建HTML页面并在浏览器中运行它们只是为了测试JavaScript代码.这将是很多样板.我正在寻找能为LINQPad为LINQ做什么的JavaScript.
我很确定我在网上看到了一些但不记得它的名字.您可以输入内容并运行它们并在线测试它们.
我知道今天的大多数浏览器都提供某种JavaScript编辑器或沙箱或控制台,您可以在其中执行相同的操作.我只是好奇我是否可以做一些类似于独立过程的事情.
如果没有,即使我可以提醒您尝试使用代码片段的在线内容,那也很棒.我认为它被称为gist或其他通常我曾经知道的东西,就像我的手背,但它现在拼命地逃避了我.
如果我错了,请纠正我.下面的代码片段是一个函数语句:
function foo() {}
Run Code Online (Sandbox Code Playgroud)
以下是所有函数表达式.
var foo = function() { } // or
var foo = function foo() { } // or
var foo = new function() { }
Run Code Online (Sandbox Code Playgroud)
我的问题是,这两种形式的函数表达式有什么区别?
var foo = function() { } // and
var foo = new function() { }
Run Code Online (Sandbox Code Playgroud)
第二个也是构造函数表达式吗?如果是,哪个类(我在这里丢失了单词,我知道JavaScript没有类,但是按类,这里,我的意思是模板或函数或原型)
更新
那些提供相关问题链接的人,非常感谢.对此,我真的非常感激.我正在努力学习这种语言,在这一点上,老实说,我的判断是如此新生,以至于我无法判断他们是否都是同一个问题.我知道我读的越多,虽然我发现它非常迷人,但在这个阶段我越是困惑.我可能需要时间来充分理解这种美妙语言的美妙.同时,请继续提及其他相关主题.
为什么你会订阅甚至创建一个永远不会产生任何东西的观察,甚至不会产生错误,也不会完成?
我希望有一个独立的editor和debugger,基本上是一个IDE为JavaScript。我目前只使用命令行运行独立的脚本和编辑它们的混合Notepad++,有时Scratchpad是进来Firefox Developer tools。
但是Debugger中Firefox Developer Tools没有显示我的来源ScratchPad。我该如何向他们展示?
此外,我无法在ScratchPad编辑器中设置断点。
题
我正在使用Eclipse for Java EE,Mars 2,当我构建项目时,我在控制台窗口中看不到任何输出.
我在哪里可以看到项目构建进度和错误?
我看到Kotlin提供了许多用于实现集合的接口.它们列在此页面上.
我没有看到Kotlin提供的任何实现.
但是,我确实看到全局命名空间中有一些函数可以帮助我们创建这些集合的实例.例如,为了创建一个可变的数字列表,我们可能会说:
var numbers : MutableList<Int> = mutableListOf(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
要创建列表的只读视图,我们可能会说:
val readOnlyViewOfNumbers : List<Int> = numbers;
Run Code Online (Sandbox Code Playgroud)
或者,要创建一个只读的数字列表,我们可能会说:
val readOnlyListOfNumbers : List<Int> = listOf(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
要创建n项目列表并使用值初始化每个元素null,我们可能会说:
// Sorry, I forgot the function name for this one. It
// is not nullableListOf(...)
val numbers : List<Int> = nullableListOf(n);
Run Code Online (Sandbox Code Playgroud)
要创建一个数组,比如说,对于数组的每个元素都有5个带有初始化函数的元素,我们可能会说:
val myArray : Array<Int> = Array(5, (i) => { /* return whatever */ };
Run Code Online (Sandbox Code Playgroud)
但是,如果我想创建一个List<Book>没有任何书籍,但我只想像这样初始化它(Java或C#代码):
List<Book> books = new ArrayList<Book>(); // Java …Run Code Online (Sandbox Code Playgroud) 在Windows资源管理器中,最新版本的存储库为绿色的选中图标,对于不再显示的存储库为红色的标记。
我该如何带他们回来?
请参阅所附图片。例如,我在名为Temp的存储库中确实有一些未跟踪的文件。
但是,所有文件夹都没有绿色或红色图标来显示git存储库状态。
他们曾经很早就在那里。他们在几周前突然消失了。
我正在使用64位Windows 7 Home Premium。
c# ×3
javascript ×3
.net ×2
java ×2
eclipse ×1
firefox ×1
git ×1
google-api ×1
kotlin ×1
lambda ×1
linq ×1
nuget ×1
tortoisegit ×1