自从我在2005年从VB6迁移到VB.NET以来,我一直在使用CType从一种数据类型转换到另一种数据类型.我这样做是因为它只是更快地输入,以前存在于VB6中我不知道为什么我必须使用DirectCast,如果它们之间显然没有区别.
我偶尔会使用TryCast,因为我知道有时候施法会失败.但是我无法区分CType和DirectCast.
谁能告诉我简单的简单英语有什么区别两者(CType和DirectCast)有什么区别?添加使用内容的示例也会有所帮助.
我想它可能是类似的collections.namedtuple,但这更像是一个冻结的词典(一个半冻结的词典).不是吗?
A"frozendict"应该是一个冰冻的字典,它应该有keys,values,get,等,并支持in,for等等.
输出:
你好
,你好吗?
码:
<p>hello <br> How are you </p>
Run Code Online (Sandbox Code Playgroud)
如何实现相同的输出<br>?
编辑:我很清楚这对于值类型非常有效,我的具体问题是将其用于引用类型.
Edit2:我也知道你不能在结构中覆盖引用类型和值类型,这只是为了将几个引用类型字段相互重叠.
我一直在修补.NET/C#中的结构,我发现你可以这样做:
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1 {
class Foo { }
class Bar { }
[StructLayout(LayoutKind.Explicit)]
struct Overlaid {
[FieldOffset(0)] public object AsObject;
[FieldOffset(0)] public Foo AsFoo;
[FieldOffset(0)] public Bar AsBar;
}
class Program {
static void Main(string[] args) {
var overlaid = new Overlaid();
overlaid.AsObject = new Bar();
Console.WriteLine(overlaid.AsBar);
overlaid.AsObject = new Foo();
Console.WriteLine(overlaid.AsFoo);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上避免在运行时通过使用具有显式字段布局的结构进行动态转换,然后以正确的类型访问内部对象.
现在我的问题是:这是否会以某种方式导致内存泄漏,或CLR内部的任何其他未定义的行为?或者这是一个完全支持的约定,可以使用而没有任何问题?
我知道这是CLR的一个黑暗角落,而且这种技术在极少数特定情况下才是可行的选择.
我有一个Store包含以下列表的列表Products:
var store = new Store();
store.Products.Add(new Product{ Id = 1, Name = "Apples" };
store.Products.Add(new Product{ Id = 2, Name = "Oranges" };
Database.Save(store);
Run Code Online (Sandbox Code Playgroud)
现在,我想编辑其中一个Products,但是有一个瞬态实体.例如,这将是来自Web浏览器的数据:
// this is what I get from the web browser, this product should
// edit the one that's already in the database that has the same Id
var product = new Product{ Id = 2, Name = "Mandarin Oranges" };
store.Products.Add(product);
Database.Save(store);
Run Code Online (Sandbox Code Playgroud)
但是,尝试这样做会给我一个错误:
具有相同标识符值的不同对象已与会话关联
原因是因为store.Products集合已包含具有相同Id的实体.我该如何解决这个问题?
我正在使用带有逃逸扩展的 vim .它有一个:Gdiff命令,它带你进入vimdiff模式,但关闭/退出vimdiff模式的正确/快速方法是什么?
即,假设我正在编辑Git存储库下的文件FooBar.txt.我启动:Gdiff,检查我在vimdiff中的更改,然后我想回来继续编辑FooBar.txt或任何其他文件:)
更新1:我将在下一个工作日试试这些快速组合:)
"vimdiff current vs git head (fugitive extension)
nnoremap <Leader>gd :Gdiff<cr>
"switch back to current file and closes fugitive buffer
nnoremap <Leader>gD :diffoff!<cr><c-w>h:bd<cr>
Run Code Online (Sandbox Code Playgroud)
UPDATE2:我当前的映射(仅关闭diff窗口!)
"vimdiff current vs git head (fugitive extension)
nnoremap <Leader>gd :Gdiff<cr>
"switch back to current file and closes fugitive buffer
nnoremap <Leader>gD <c-w>h<c-w>c
Run Code Online (Sandbox Code Playgroud)
此外,请帮助我决定以下是否应该是anwser:https://stackoverflow.com/a/15975201/275980
相当简单的问题.是否可以注意到Android模拟器中的振动?
我一直在寻找如何恢复emacs会话,没有运气.我正在寻找恢复所有以前打开的缓冲区,其中一些可能包含erc,shell,目录列表,文件等.
每次打开emacs,我都会花很多时间来安排我的缓冲区; 将它们分成行和列,打开一个外壳,安排irc通道.上班需要一段时间.
我尝试将以下内容添加到init.el中
(desktop-save-mode 1)
Run Code Online (Sandbox Code Playgroud)
然后使用Mx桌面保存.这似乎只能恢复打开的文件,而不是shell或缓冲区中运行的任何其他内容.
我还检查了以下问题:
阅读:
这是我的emacs会话的屏幕截图示例.
一个简单的答案就是专注于实际工作:P
c# ×2
python ×2
.a ×1
.net ×1
android ×1
c++ ×1
casting ×1
clr ×1
css ×1
css3 ×1
ctype ×1
dictionary ×1
directcast ×1
dot-emacs ×1
emacs ×1
file ×1
html ×1
ide ×1
immutability ×1
linker ×1
linux ×1
nhibernate ×1
persistence ×1
struct ×1
vb.net ×1
vim ×1
vim-fugitive ×1
vimdiff ×1