小编pal*_*ain的帖子

在C#Dictionary中为Key和Value命名,以提高代码的可读性

在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的便利性,但同时我们需要一些方法来提高可读性

c# generics dictionary

11
推荐指数
3
解决办法
5769
查看次数

C#程序启动时,会自动删除复制到Debug文件夹的文件

我正在使用Visual Studio 2012来构建WPF程序.有一个从C编译的DLL 我使用DllImport来调用.Dll在项目中添加并标记为

  • 构建行动:内容
  • 复制到输出目录:始终复制

构建项目解决方案时,将dll复制到Debug文件夹,并成功生成Visual Studio生成的.exe.但是,当我运行它时,通过双击文件资源管理器中生成的.exe或VS调试器中的"运行",dll会自动被删除.

为什么?

c# wpf dll dllimport visual-studio-2012

7
推荐指数
1
解决办法
984
查看次数

如何通过git fetch --all获取所有遥控器时控制获取的顺序

我的git中添加了很多遥控器.每个遥控器都是指向不同区域的网络共享文件夹的链接,每个遥控器包含一个开发人员提交的代码.

我每天都需要获取git fetch --all提交的最新代码.

由于地理位置,网络共享文件夹的速度不同.其中一些非常慢.我想首先从最快的共享文件夹中获取数据,以便我可以在等待获取其他遥控器时开始检查代码.

git fetch --all获取的顺序与git remote -v显示的顺序不同.如何确定获取顺序,是否有办法控制订单?

git git-fetch

6
推荐指数
2
解决办法
142
查看次数

当git fetch --all时,如何忽略被复制到本地git的一些分支/标签

我有很多遥控器添加到我的git.每个远程程序都是一个开发人员的存储库 每天我都会fetch --all看到他们创建的任何新分支都可以查看.

但是,开发人员可以将"私有"分支推送到远程.比如,所有以下划线前缀命名的分支都没有准备好进行审核,而其他分支已准备好进行审核.

在执行此操作时git fetch --all,我的git图(by /libexec/git-core/git-gui)将看到所有分支,无论它们是否具有下划线前缀.它使图表复杂化.

我想git fetch忽略那些_XXXX分支被下载到我的本地git.所以当我查看git图时,它就像:

  • 可见分支: RemoteA/Branch1,RemoteB/Branch1,RemoteB/Branch2
  • 忽略分支: RemoteA/_Branch2,RemoteB/_Branch3

我怎样才能做到这一点?

git git-fetch git-branch

6
推荐指数
2
解决办法
3034
查看次数

在 app.config &lt;assemblyBinding&gt;/&lt;codeBase&gt; 中配置任何较新程序集版本的 .NET 程序集绑定

在 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.0C:\ ABC安装\ ABC。 dll如果我把 1.0.0.0 放在那里。

条件是在编译时我们不知道 c:\ABC-install 中的版本号是多少。我们所知道的是它向后兼容。该项目应该能够与所有版本的 ABC 程序集一起运行。

如何配置 app.config 以允许绑定外部程序集的较新版本,但在编译时未知运行时版本,而在编译时项目是基于参考设置中的 1.0.0.0 dll 构建的?

编辑:codeBase 版本为 ???? 清楚地表明问题。

.net c# app-config .net-assembly assembly-binding-redirect

5
推荐指数
1
解决办法
3216
查看次数

WPF WebBrowser.Document 属性实际返回哪个对象?

从 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)

c# wpf mshtml webbrowser-control

5
推荐指数
1
解决办法
2354
查看次数

有没有一种方法可以将版本信息存储在Rust编译的可执行文件或库中?

构建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也没有版本信息。也许这是另一个问题,但我想我首先要提出一点。

versioning dll rust rust-cargo

5
推荐指数
1
解决办法
634
查看次数

如何释放C#中Rust返回的字符串的内存?

我从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)

c# memory-leaks memory-management ffi rust

3
推荐指数
1
解决办法
969
查看次数

如何向用户发布python程序

我已经开发了anaconda的python程序作为我的开发环境.我如何打包我的python程序(现在说它只是1 .py文件)并分发给用户的PC以便它们运行?

python software-distribution release-management anaconda

1
推荐指数
1
解决办法
1434
查看次数