小编Yur*_*rik的帖子

IEqualityComparer <T>使用ReferenceEquals

是否有使用的默认IEqualityComparer<T>实现ReferenceEquals

EqualityComparer<T>.Default使用ObjectComparer,它使用object.Equals().在我的例子中,对象已经实现IEquatable<T>,我需要忽略并仅通过对象的引用进行比较.

.net c# iequalitycomparer referenceequals

57
推荐指数
4
解决办法
7115
查看次数

使用DataContractSerializer序列化没有名称空间的对象

如何从使用DataContractSerializer序列化的对象的XML表示中删除XML命名空间?

该对象需要序列化为非常简单的输出XML.

  • 最新和最好 - 使用.Net 4 beta 2
  • 该对象永远不需要反序列化.
  • XML不应该有任何xmlns:...命名空间引用
  • 需要支持Exception和ISubObject的任何子类型.
  • 改变原始对象将非常困难.

宾语:

 [Serializable] 
 class MyObj
 {
     string str;
     Exception ex;
     ISubObject subobj;
 } 
Run Code Online (Sandbox Code Playgroud)

需要序列化为:

<xml>
  <str>...</str>
  <ex i:nil="true" />
  <subobj i:type="Abc">
     <AbcProp1>...</AbcProp1>
     <AbcProp2>...</AbcProp2>
  </subobj>
</xml>
Run Code Online (Sandbox Code Playgroud)

我用过这段代码:

private static string ObjectToXmlString(object obj)
{
    if (obj == null) throw new ArgumentNullException("obj");

    var serializer =
        new DataContractSerializer(
            obj.GetType(), null, Int32.MaxValue, false, false, null,
            new AllowAllContractResolver());

    var sb = new StringBuilder();
    using (var xw = XmlWriter.Create(sb, new XmlWriterSettings
    {
        OmitXmlDeclaration = true,
        NamespaceHandling …
Run Code Online (Sandbox Code Playgroud)

.net namespaces xml-serialization datacontractserializer

42
推荐指数
2
解决办法
3万
查看次数

如何将NPM包迁移到组织@scope

NPM最近为模块引入了@scopes /组织.有没有一种将现有模块迁移到组织的好方法?是否有任何工具可以自动化大量的包?NPM是否支持重定向,以便其他软件仍然可以使用旧名称,但是会收到应该更新的通知吗?

node.js npm

18
推荐指数
2
解决办法
5321
查看次数

带有NUnit的Microsoft PEX

我正在考虑为我的项目使用Microsoft PEX工具,但我更愿意使用NUnit而不是MSUnit.显然,PEX Extensions项目是专门为此创建的,但它现在没有发布,似乎已经死了.有没有人能够做到这一点?

谢谢!

.net c# nunit pex

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

当 T -&gt; U 用 From 定义时,惯用的 Option&lt;T&gt; 到 Option&lt;U&gt;

给定两个任意大小的类型TU,其中U: From<T>,标准库是否有理由不提供From<Option<T>> for Option<U>a where U: From<T>?我尝试这样做,但遇到了冲突的实现错误,所以显然存在限制,只是不确定在哪里。是的,我知道我可以用 a 来做到这一点Option::map(),但似乎 std 应该开箱即用。

enum Opt<T> {
    Some(T),
    None,
}

impl<T: From<U>, U> From<Opt<T>> for Opt<U> {
    fn from(opt: Opt<T>) -> Self {
        match opt {
            Opt::Some(t) => Opt::Some(t.into()),
            Opt::None => Opt::None,
        }
    }
}

struct A;
struct B;

impl From<A> for B {
    fn from(_: A) -> Self {
        B
    }
}

fn main() {
    let a = Opt::Some(A);
    let _b: …
Run Code Online (Sandbox Code Playgroud)

rust

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

将7z文件视为.NET流

我想链接多个流操作(例如下载文件,动态解压缩,以及处理没有任何临时文件的数据).这些文件是7z格式.有一个LZMA SDK可用,但强制我创建一个外部输出流而不是一个流本身 - 换句话说,输出流必须完全写入才能使用它.SevenZipSharp似乎也缺少这个功能.

有没有人这样做过?

// in pseudo-code - CompressedFileStream derives from Stream
foreach (CompressedFileStream f in SevenZip.UncompressFiles(Web.GetStreamFromWeb(url))
{
    Console.WriteLine("Processing file {0}", f.Name);
    ProcessStream( f ); // further streaming, like decoding, processing, etc
}
Run Code Online (Sandbox Code Playgroud)

每个文件流的行为类似于表示一个文件的一次性读取流,并且在主压缩流上调用MoveNext()会自动使该文件无效并跳过该文件.

可以进行类似的构造以进行压缩.示例用法 - 对非常大量的数据进行一些聚合 - 对于dir中的每个7z文件,对于每个文件内部,对于每个文件中的每个数据行,总结一些值.

更新2012-01-06

#ziplib(SharpZipLib)已经完成了我需要的带有ZipInputStream类的zip文件.下面是一个示例,它将所有文件生成为给定zip文件中不可搜索的流.仍在寻找7z解决方案.

IEnumerable<Stream> UnZipStream(Stream stream)
{
    using (var zipStream = new ZipInputStream(stream))
    {
        ZipEntry entry;
        while ((entry = zipStream.GetNextEntry()) != null)
            if (entry.IsFile)
                yield return zipStream;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net compression 7zip stream

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

在 Github 操作工作流程中根据拉取请求获取基本分支 SHA

在拉取请求的 GitHub 操作中,我需要在“当前主控”的上下文中运行一些代码,然后在 PR 分支的上下文中重新运行相同的代码。

我可以检查将拉取请求与其 PR 所针对的基础进行比较。我如何找到基础分支的 SHA(例如,如果 PR 与主分支相反,则当前主分支)?

jobs:
  job_on_base:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: "${{ github.base_ref }}"
      - run: |
          # Seems like I can get it here with $(git log -1 --format="%H")
          echo "My current SHA is ... ?"

  job_on_pr:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: "${{ github.ref }}"
      - run: |
          echo "My current SHA is $GITHUB_SHA"
          echo "The BASE SHA is ?"
Run Code Online (Sandbox Code Playgroud)

github github-actions

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

在C#/ .NET中为producer/cosumer实现异步流

有一个lib将其结果输出到给定的Stream对象中.我想在lib完成之前开始使用结果.Stream应该是阻塞的,以简化使用并避免过多的内存消耗,如果生产者提前跑得太远; 线程安全,允许生产者和消费者的独立存在.

一旦lib完成,生产者线程应关闭流,从而通知消费者没有更多数据.

我正在考虑使用NetworkStream或PipeStream(匿名),但两者都可能因为通过内核发送数据而变慢.

任何推荐?


var stream = new AsyncBlockingBufferedStream();

void ProduceData() { // In producer thread externalLib.GenerateData(stream); stream.Close(); }

void ConsumeData() { // In consumer thread int read; while ((read = stream.Read(...)) != 0) { ... } }

.net c# stream

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

如何从.NET 4.5中的并行任务中获益

我想使用.NET迭代器和并行Tasks/await?.像这样的东西:

IEnumerable<TDst> Foo<TSrc, TDest>(IEnumerable<TSrc> source)
{
    Parallel.ForEach(
        source,
        s=>
        {
            // Ordering is NOT important
            // items can be yielded as soon as they are done                
            yield return ExecuteOrDownloadSomething(s);
        }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是.NET无法原生地处理这个问题.到目前为止@svick的最佳答案 - 使用AsParallel().

奖励:任何实现多个发布者和单个订阅者的简单异步/等待代码?订阅者将屈服,并且pubs将处理.(仅核心库)

c# yield-return task-parallel-library async-await c#-5.0

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

自动执行 GCP 永久性磁盘初始化

是否有任何脚本可以自动格式化永久性磁盘并将其附加到 Google Cloud VM 实例,而不是执行格式化和安装步骤

永久性磁盘是使用 Terraform 创建的,它还会创建一个 VM 并使用attached_disk命令将磁盘附加到它。

我希望在 VM 实例启动时运行一个简单的脚本:

  • 检查附加的磁盘是否已格式化,如果需要,请使用 ext4 进行格式化
  • 检查磁盘是否已挂载,如果未挂载则挂载
  • 别的什么都不做

google-compute-engine google-cloud-platform terraform terraform-provider-gcp

9
推荐指数
2
解决办法
2252
查看次数