在C#struct中,我们可以通过它的名称清楚地知道变量的用途.例如,
public struct Book
{
public string title;
public string author;
}
Run Code Online (Sandbox Code Playgroud)
然后,我知道b.title是一种字符串,它指的是标题.
但是在C#字典中,我们只能指定类型
Dictionary<string,string> d
Run Code Online (Sandbox Code Playgroud)
我如何使代码更具可读性,使得字典的键是字符串的类型,它是指标题,值是字符串的类型,它指的是作者?这意味着,其他人在阅读代码时很容易知道d ["JRR Tolkien"]是字典的错误用法.
编辑 @mike z建议使用变量名titleToAuthor来帮助提高可读性.但我真正的问题是在代码中有嵌套字典.例如
Dictionary<string, Dictionary<string, string>>,
or even 3 levels
Dictionary<string, Dictionary<string , Dictionary< string , string[] >>>.
Run Code Online (Sandbox Code Playgroud)
我们希望在不创建自己的类的情况下保持使用Dictionary的便利性,但同时我们需要一些方法来提高可读性
我正在使用Visual Studio 2012来构建WPF程序.有一个从C编译的DLL 我使用DllImport来调用.Dll在项目中添加并标记为
构建项目解决方案时,将dll复制到Debug文件夹,并成功生成Visual Studio生成的.exe.但是,当我运行它时,通过双击文件资源管理器中生成的.exe或VS调试器中的"运行",dll会自动被删除.
为什么?
我的git中添加了很多遥控器.每个遥控器都是指向不同区域的网络共享文件夹的链接,每个遥控器包含一个开发人员提交的代码.
我每天都需要获取git fetch --all提交的最新代码.
由于地理位置,网络共享文件夹的速度不同.其中一些非常慢.我想首先从最快的共享文件夹中获取数据,以便我可以在等待获取其他遥控器时开始检查代码.
git fetch --all获取的顺序与git remote -v显示的顺序不同.如何确定获取顺序,是否有办法控制订单?
我有很多遥控器添加到我的git.每个远程程序都是一个开发人员的存储库 每天我都会fetch --all看到他们创建的任何新分支都可以查看.
但是,开发人员可以将"私有"分支推送到远程.比如,所有以下划线前缀命名的分支都没有准备好进行审核,而其他分支已准备好进行审核.
在执行此操作时git fetch --all,我的git图(by /libexec/git-core/git-gui)将看到所有分支,无论它们是否具有下划线前缀.它使图表复杂化.
我想git fetch忽略那些_XXXX分支被下载到我的本地git.所以当我查看git图时,它就像:
RemoteA/Branch1,RemoteB/Branch1,RemoteB/Branch2RemoteA/_Branch2,RemoteB/_Branch3 我怎样才能做到这一点?
在 C# 项目中,我使用外部程序集并将其添加到项目的 References 中。假设程序集称为“ ABC ”,位于版本1.0.0.0 的编译时c:\complie-time\abc.dll。“复制本地”设置为 false。
因为它不是本地复制的,所以必须在 app.config 中指定程序集位置。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ABC" culture="neutral" publicKeyToken="xyz"/>
<codeBase version="????" href="FILE://c:/ABC-install/abc.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
ABC 程序集由 ABC 应用程序安装提供。所以在运行时,dll 位于不同的位置c:\ABC-install\abc.dll。
问题是:我应该在codeBase版本中放什么?
如果用户安装ABC的新版本说1.1.0.0,它被称为是向下兼容的,上面将无法工作,因为.NET框架正在寻找版本1.0.0.0在C:\ ABC安装\ ABC。 dll如果我把 1.0.0.0 放在那里。
条件是在编译时我们不知道 c:\ABC-install 中的版本号是多少。我们所知道的是它向后兼容。该项目应该能够与所有版本的 ABC 程序集一起运行。
如何配置 app.config 以允许绑定外部程序集的较新版本,但在编译时未知运行时版本,而在编译时项目是基于参考设置中的 1.0.0.0 dll 构建的?
编辑:codeBase 版本为 ???? 清楚地表明问题。
从 MSDN 来看,返回类型只是“object”。
但是,如果您想操作元素,则返回的此对象可以强制转换为 mshtml.HTMLDocument,或者如果您想注册事件回调,则可以将同一对象强制转换为 (mshtml.HTMLDocumentEvents2_Event)。
在 MSHTML参考中中,定义了很多接口。但尚不清楚这些接口如何与 WPF WebBrowser.Document 对象一起使用
如果返回的对象是COM对象,那么它是什么?此 WPF WebBrowser.Document和 Windows 窗体WebBrower.Document 有什么不同?
示例代码:
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)_browser.Document;
IHTMLElement bt = doc.getElementById("123");
mshtml.HTMLDocumentEvents2_Event iEvent = (mshtml.HTMLDocumentEvents2_Event)_browser.Document;
iEvent.onclick += new HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
Run Code Online (Sandbox Code Playgroud) 构建Rust二进制文件(可执行文件或dylib)时,其中配置的版本信息Cargo.toml对所构建的二进制文件无效,这意味着配置的版本未存储在二进制文件中。
在Linux中,当我使用readelf -V.so文件时,可以看到支持的接口(SO名称)存储在ELF文件的版本定义部分'.gnu.version_d'下。例如,输出readelf -V /lib/libnss_files-2.12.so:
Version definition section '.gnu.version_d' contains 2 entries:
Addr: 0x0000000000001540 Offset: 0x001540 Link: 5 (.dynstr)
000000: Rev: 1 Flags: BASE Index: 1 Cnt: 1 Name: libnss_files.so.2
0x001c: Rev: 1 Flags: none Index: 2 Cnt: 1 Name: GLIBC_PRIVATE
Run Code Online (Sandbox Code Playgroud)
该/lib/libnss_files-2.12.so文件正在实现接口版本libnss_files.so.2
readelf -VRust或Cargo生成的dylib或可执行文件的输出不包含此类版本信息。版本配置中Cargo.toml仅由crates.io使用。
而且,Windows DLL支持存储版本信息,而不是像Linux这样的SONAME接口版本名称。交叉编译的Windows DLL也没有版本信息。也许这是另一个问题,但我想我首先要提出一点。
我从Rust中暴露了这两个函数
extern crate libc;
use std::mem;
use std::ffi::{CString, CStr};
use libc::c_char;
pub static FFI_LIB_VERSION: &'static str = env!("CARGO_PKG_VERSION"); // '
#[no_mangle]
pub extern "C" fn rustffi_get_version() -> *const c_char {
let s = CString::new(FFI_LIB_VERSION).unwrap();
let p = s.as_ptr();
mem::forget(s);
p as *const _
}
#[no_mangle]
pub extern "C" fn rustffi_get_version_free(s: *mut c_char) {
unsafe {
if s.is_null() {
return;
}
let c_str: &CStr = CStr::from_ptr(s);
let bytes_len: usize = c_str.to_bytes_with_nul().len();
let temp_vec: Vec<c_char> = Vec::from_raw_parts(s, bytes_len, bytes_len);
} …Run Code Online (Sandbox Code Playgroud) 我已经开发了anaconda的python程序作为我的开发环境.我如何打包我的python程序(现在说它只是1 .py文件)并分发给用户的PC以便它们运行?
c# ×5
dll ×2
git ×2
git-fetch ×2
rust ×2
wpf ×2
.net ×1
anaconda ×1
app-config ×1
dictionary ×1
dllimport ×1
ffi ×1
generics ×1
git-branch ×1
memory-leaks ×1
mshtml ×1
python ×1
rust-cargo ×1
versioning ×1